• django notes 六:数据库 CRUD 操作


    CRUD 也没什么可说的,django 提供了完善的 orm  api, 直接用就行了。

    我只贴几个列子,一看就明白了,自己再用用就熟了。

    # create
    b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
    b.save()
    
    # create and save
    Blog.objects.create(name='Beatles Blog', tagline='All the latest Beatles news.')
    
    # update, 外键字段也是一样的
    b5.name = 'New name'
    b5.save()
    
    # 添加 ManyToManyField 用 add
    joe = Author.objects.create(name="Joe")
    entry.authors.add(joe)
    
    # delete
    e.delete()
    Entry.objects.filter(pub_date__year=2005).delete()
    
    # 查询 QuerySet
    # 默认都是 lazy query, 用到时才会真正执行数据库查询
    
    # 打印生成的 sql 语句, 直接访问 QuerySet 实例的 query 属性
    t = Tag.objects.all()
    print t.query
    
    # get all
    all_entries = Entry.objects.all()
    
    # 查询字段  field + 双下环线 + 操作的类型
    Entry.objects.all().filter(pub_date__year=2006)
    Entry.objects.filter(pub_date__lte='2006-01-01')
    
    # 取 1 条数据,取不到会抛  DoesNotExist 异常,取到多条时会抛 MultipleObjectsReturned 异常
    one_entry = Entry.objects.get(pk=1)
    
    # slice
    Entry.objects.all()[:5]  # 转成 sql 是 LIMIT 5
    
    # 外键字段引用
    Entry.objects.filter(blog_id=4)
    Entry.objects.filter(blog__name='Beatles Blog')
    
    # F expressions 引用并操作数据库字段
    from django.db.models import F
    Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
    Entry.objects.filter(n_comments__gt=F('n_pingbacks') * 2)
    
    # 主键查询
    Blog.objects.get(id=14) # __exact is implied
    Blog.objects.get(pk=14) # pk implies id__exact
    
    # Q object 执行数据库 and  or  操作
    Q(question__startswith='Who') | Q(question__startswith='What') # WHERE question LIKE 'Who%' OR question LIKE 'What%'
    Q(question__startswith='Who') & Q(name='leslie')
    
    # order_by 默认升序,- 表示降序
    Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
    
    # Manager.raw() 方法执行 raw sql
    for p in Person.objects.raw('SELECT * FROM myapp_person'):
        print(p)

    至于完全手动控制 sql 查询,数据库事物,signal,查询优化和其它细节,用到时直接参考官方文档和源码就行了,我也没用过

  • 相关阅读:
    NHibernate 中in的使用方法,以及使用sql表达式
    C#调用存储过程,并且获得返回值和OutPut字符串
    NHibernate 中delete的使用方法
    SQL中Case when 方法的使用
    NHibernate 根据Model ID获取对象
    C# Excel导出数据和Excel导入数据帮助类
    查询五个月前到现在的数据
    NHibernate 中Between的使用方法
    jquery操作滚动条滚动到指定位置
    将DataReader转换为DataTable
  • 原文地址:https://www.cnblogs.com/lesliefang/p/4725021.html
Copyright © 2020-2023  润新知