python django框架orm_Django框架 之 ORM查询操作详解

浏览目录

一般操作

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:

查询评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值