django ORM常用的查询总结


假设模型名字为Book,字段有id,name(char),page_nums(int),publication_date(datatime), readcount(int), commentcount(int)

1.基础查询

Book.objects.get(id=1)
Book.objects.filter(page_num > 100)
Book.objects.all() /Book.object.count()

2.模糊查询

# 书名包含“西游”
Book.objects.filter(name__contains='西游')

# 书名以“龙”开头
Book.objects.filter(name__startswith='')

# 书名以“族”结尾
Book.objects.filter(name__endswith='')

3.范围,比较,空查询

gt大于 (greater then)
gte大于等于 (greater then equal)
lt小于 (less then)
lte小于等于 (less then equal)

Book.objects.filter(id__in=[1,35])

Book.objects.filter(id__gt=3)

Book.objects.filter(name__isnull=True)

4.日期查询

查询2019年发行的图书
Book.objects.filter(publication_date__year=2019)
查询2018年以后发行的图书
Book.objects.filter(pub_date__gt='2018-1-1')

5.F对象与Q对象

from django.db.models import F, Q
常用查询为与常量的比较,当本身的两个属性进行比较时需要用到F对象,例如查询阅读量大于评论量的书籍
Book.objects.filter(readcount__gt=F('commentcount'))
而且可以进行运算,例如阅读量大于五倍评论量的书籍
Book.objects.filter(readcount__gt=F('commentcount')*5)
当表示多个过滤器之间的联合查询时,“and”可以正常查询,但“or”需要使用Q对象,例如
阅读量大于1000且发行时间为2018年以后
Book.objects.filter(readcount__gt=1000, publication_date__gt='2018-1-1') / Book.objects.filter(readcount__gt=1000).filter(publication_date__gt='2018-1-1')
表示""时只能使用Q对象 阅读量大于1000或评论量大于200 Book.objects.filter(Q(readcount__gt=1000)|Q(commentcount__gt=200))

Q对象可以再前面加上一个“~”表示“非”,例如,发行时间不是2019年的图书
Book.objects.filter(~Q(publication_date__year=2019))

6.聚合查询与排序

Avg平均,Count数量,Max最大,Min最小,Sum求和
调用聚合函数需要使用aggregate()过滤器,其返回值为一个字典类型,但Count一般不使用,例如,

from django.db.models import Sum, Avg, Count, Max, Min
查询阅读量的总和,返回为字典

Book.objects.aggregate(Sum('readcount'))
>>> {'readcount__sum': 12345}

查询一共有多少本书,返回为数字
Book.objects.count() / Book.objects.all().count()
>>> 123

按照阅读量排序,降序可以在查询字段前面加上一个“-”来表示
Book.objects.all()。order_by("readcount")
Book.objects.all()。order_by("-readcount")

 

7.关联查询

当模型使用外键时就就需要使用关联查询,这里添加一张新的关联表-作者一个作者对应多个图书:Author [id, name(char), book(ForeignKey)]

由一到多的访问语法:一对应的模型类对象.多对应的模型类名小写_set,例如
查询名字为裟椤双树作者的所有书籍,将返回一个包含所有书籍对象的查询集
>>> author = Author.objects.get(name=“裟椤双树”)
>>> author.book_set.all()
由多到一的访问语法:多对应的模型类对象.多对应的模型类中的关系类属性名
查询浮生物语书籍的作者
book= Book.objects.get(name=“浮生物语”)
book.author

关联过滤查询

8.Django中外键详解

 

9.Django中的查询集(QuerySet)介绍

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM