浏览目录
一般操作
ForeignKey操作
ManyToManyField
聚合查询
分组查询
F查询和Q查询
事务
Django终端打印SQL语句
在Python脚本中调用Django环境
其他操作
一、一般操作
必知必会
小总结
1、返回QuerySet对象的方法有:
all()、filter()、exelude()、order_by()、reverse()、distinct()
2、特殊的QuerySet:
values() :返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
3、返回具体对象的
get()、first()、last()
4、返回布尔值的方法有:
exists()
5、返回数字的方法有:
count()
单表查询之神奇的双下划线
多表查询之神奇的双下划线
注意:条件查询即与对象查询对应,是指在filter,values等方法中的通过__来明确查询条件。
二、ForeignKey操作
正向查找
对象查找(跨表)
语法:
对象.关联字段.字段
示例:
字段查找(跨表)
语法:
关联字段_字段
示例:
反向操作
对象查找
语法:
obj.表名_set
示例:
字段查找
语法:
表名_字段
示例:
三、ManyToManyField
class RelateManager
"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。
它存在于下面两种情况:
外键关系的反向查询
多对多关联关系
简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。
方法
create()
创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。
add()
把指定的model对象添加到关联对象集中。
添加对象
添加id
set()
更新model对象的关联对象。
remove()
从关联对象集中移除执行的model对象
clear()
从关联对象集中移除一切对象。
注意:
对于ForeignKey对象,clear()和remove()方法仅在null=True时存在。
示例:
ForeignKey字段没设置null=True时,
没有clear()和remove()方法:
当ForeignKey字段设置null=True时,
此时就有clear()和remove()方法:
注意:
对于所有类型的关联字段,add()、create()、remove()和clear(),set()都会马上更新数据库。换句话说,在关联的任何一端,都不需要再调用save()方法。
四、聚合查询
aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。
键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。
示例:
如果你想要为聚合值指定一个名称,可以向聚合子句提供它。
如果你希望生成不止一个聚合,你可以向aggregate()子句中添加另一个参数。所以,如果你也想知道所有图书价格的最大值和最小值,可以这样查询:
五、分组查询
为调用的QuerySet中每一个对象都生成一个独立的统计值。
示例1:统计每一本书的作者个数
示例2:统计出每个出版社买的最便宜的书的价格
方法二:
示例3:统计不止一个作者的图书
示例4:根据一本图书作者数量的多少对查询集 QuerySet进行排序
示例5:查询各个作者出的书的总价格
六、F查询和Q查询
F查询
我们构造的过滤器都只是将字段值与某个常量做比较。如果我们要对两个字段的值做比较,那该怎么做呢?
Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。
示例1:
查询评论