首页 > 编程知识 正文

django中的orm,在django中orm查询方法及区别

时间:2023-05-03 15:49:23 阅读:272600 作者:1405

F函数

主要用于获取字段当前的值

场景:假如有表,表有字段age,我想把所有age都自增1,该如何做?

SQL语句:update 表名 set age=age+1

若用ORM该如何操作?

# F()的用法(用于获取字段原来的值)from django.db.models import Fresult = models.UserInfo.objects.update(age=F('age')+1)print(result)

原表:

现表:

Q函数

主要用于组合筛选条件

需求:假如有表,取表中id为(1,10)的数据

SQL: select * from 表名 where id>1 and id<10

ORM操作:

其中,&表示与、|表示或、~表示非

# Q的用法(用于组合筛选条件) # 用法一(逻辑非用‘~’代替) from django.db.models import Q results = models.UserInfo.objects.filter(Q(id__gt=1) & Q(id__lt=10)) # results = models.UserInfo.objects.filter(Q(id=1) | Q(id=2)) for row in results: print(row.id,row.username,row.age)

Q函数还可用于复杂的条件组合。

需求:假如有表,表有字段id、age、ug_id,现取ug_id为1-3且age>20的数据

SQL:select * from 表名 where (age > 20) and (ug_id=1 or ug_id=2 or ug_id=3)

ORM操作:

# 用法二 inner1 = Q() inner1.connector = 'OR' inner1.children.append(('ug_id', 1)) inner1.children.append(('ug_id', 2)) inner1.children.append(('ug_id', 3)) inner2 = Q() inner2.connector = 'AND' inner2.children.append(('age__gt', 20)) # 将子条件inner1和inner2组合 outer = Q() outer.connector = 'AND' outer.add(inner1, 'OR') outer.add(inner2, 'AND') results = models.UserInfo.objects.filter(outer) for row in results: print(row.id,row.username,row.age,row.ug_id)

创建Q对象,Q.connector设定查询逻辑,将查询条件添加至Q.children列表,然后将多个子条件用add进行组合,就会生成类似SQL的组合查询条件

原表:

查询结果:

总结:Q函数适用于多种筛选条件嵌套的情形,可以进行组合查询,其可应用于网站的高级检索功能的实现。

如果看懂了就请点个 赞,谢谢~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。