Django—ORM中的高级查询

分类:开发相关    发布时间:2019-06-19 14:16:46
filter方法示例:
条件格式:(双下划线)
模型类属性名__条件名=值
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__range    在...范围内
__year       日期字段的年份
__month    日期字段的月份
__day        日期字段的日



查询图书评论量为34的图书的信息:
a)判等 条件名:exact。
例:查询编号为1的图书。
BookInfo.objects.filter(name="abc")  #等同于 BookInfo.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
BookInfo.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件

b)模糊查询(相当于sql的 like)
例:查询书名包含'传'的图书。contains
BookInfo.objects.filter(btitle__contains='传')
例:查询书名以'部'结尾的图书 endswith 开头:startswith
BookInfo.objects.filter(btitle__endswith='部')

c)空查询 isnull
例:查询书名不为空的图书。isnull 
select * from booktest_bookinfo where btitle is not null;
BookInfo.objects.filter(btitle__isnull=False)

d)范围查询 in
例:查询id为1或3或5的图书。
select * from booktest_bookinfo where id in (1,3,5);
BookInfo.objects.filter(id__in = [1,3,5])

e)比较查询 gt(greate than) lt(less  than) gte(equal) 大于等于
lte 小于等于
例:查询id大于3的图书。
Select * from booktest_bookinfo where id>3;
BookInfo.objects.filter(id__gt=3)

f)日期查询
例:查询1980年发表的图书。
BookInfo.objects.filter(bpub_date__year=1980)
例:查询1980年1月1日后发表的图书。
from datetime import date
BookInfo.objects.filter(bpub_date__gt=date(1980,1,1))

g)range在...范围内
BookInfo.objects.filter(name__regex="^abc")  # 正则表达式查询
BookInfo.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写

exclude(返回不满足条件的数据。)方法示例:
例:查询id不为3的图书信息。
BookInfo.objects.exclude(id=3)
User.objects.filter().excute(age=10) // 查询年龄不为10的用户
User.objects.filter().excute(age__in=[10, 20]) // 查询年龄不为在 [10, 20] 的用户

order_by(对查询结果进行排序)方法示例:
作用:进行查询结果进行排序。默认是升序,在条件里加“-”表示降序
例:查询所有图书的信息,按照id从小到大进行排序。
BookInfo.objects.all().order_by('id')

例:查询所有图书的信息,按照id从大到小进行排序。
BookInfo.objects.all().order_by('-id')

例:把id大于3的图书信息按阅读量从大到小排序显示。
BookInfo.objects.filter(id__gt=3).order_by('-bread')



F对象
作用:用于类属性(字段)之间的比较。
使用之前需要先导入:
from django.db.models import F

例:查询图书阅读量大于评论量图书信息。
BookInfo.objects.filter(bread__gt=F('bcomment'))

例:查询图书阅读量大于2倍评论量图书信息。
BookInfo.objects.filter(bread__gt=F('bcomment')*2)
 

Q对象
作用:用于查询时条件之间的逻辑关系。not and or,可以对Q对象进行 & | ~ 操作。
使用之前需要先导入:
from django.db.models import Q

例:查询id大于3且阅读量大于30的图书的信息。
BookInfo.objects.filter(id__gt=3, bread__gt=30)  # filte() 中多个条件表示 "且" ,但要用到"或",就用到 Q 对象
BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30))

例:查询id大于3或者阅读量大于30的图书的信息。
BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))

例:查询id不等于3图书的信息。
BookInfo.objects.filter(~Q(id=3))

标签: django

阅读(394)┆ 评论(0) ┆ (0) ┆ 返回博客首页


发表我的评论

欢迎您: | 退出登录


文章评论