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,3,5])

Book.objects.filter(id__gt=3)

Book.objects.filter(name__isnull=True)

4.日期查询

查询2019年发行的图书

Book.objects.filter(__year=2019)
查询2018年以后发行的图书

Book.objects.filter(pub_date__gt='2018-1-1')

5.F对象与Q对象

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(commentcount__gt=))

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

Book.objects.filter(~Q())

6.聚合查询与排序

>>> {: />>>
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=“浮生物语”
关联过滤查询



            
            

本博客源码Github地址:

https://github.com/zeus-y/

请随手给个star,谢谢!

打赏

评论