Django
常用操作
Django生产设置
Setting设置
装饰器
类
类--验证登陆
ListView
CreateView
DeleteView
URL方法
Views方法
model数据模型
models
admin
views
url
model查询操作
model聚合查询
model列操作及复杂查询
登录退出
登陆成功后跳转指定页面
修改密码
重置密码
分页
标签
HTML文件
开启HTTPS
CSRF
本文档使用MrDoc发布
返回首页
-
+
model查询操作
2020年9月22日 14:40
admin
#模糊查询常用的操作 ##Q查询: from django.db.models import Q Q(question__startswith='What') Q(question__startswith='Who') | Q(question__startswith='What') # 等价于: WHERE question LIKE 'Who%' OR question LIKE 'What%' ##大于、大于等于、小于、小于等于: >#### __gt 大于> >#### __gte 大于等于>= >#### __lt 小于< >#### __lte 小于等于<= Student.objects.filter(age__gt=10) # 查询年龄大于10岁的学生 Student.objects.filter(age__gte=10) # 查询年龄大于等于10岁的学生 Student.objects.filter(age__lt=10) # 查询年龄小于10岁的学生 Student.objects.filter(age__lte=10) # 查询年龄小于等于10岁的学生 特别注意:这里的下划线是双下划线 ##不等于/不包含于: Student.objects.filter().excute(age=10) # 查询年龄不为10的学生 Student.objects.filter().excute(age__in=[10, 20]) # 查询年龄不在 [10, 20] 的学生 ##正则regex .filter(customeraccount__regex='(小红|小明)') ##数据库 like操作 模糊查询常用的操作 >#### __exact 精确等于 like 'aaa' >#### __iexact 精确等于 忽略大小写 ilike 'aaa' >#### __contains 包含 like '%aaa%' >#### __icontains 包含,忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。 >#### __startswith 以…开头 >#### __istartswith 以…开头 忽略大小写 >#### __endswith 以…结尾 >#### __iendswith 以…结尾,忽略大小写 >#### __range 在…范围内 >#### __year 日期字段的年份 >#### __month 日期字段的月份 >#### __day 日期字段的日 ## 用法: Book.objects.filter(title__exact="python") # 等价于 title like 'python' Book.objects.filter(title__contains="python") # 等价于 title like '%python%' Book.objects.filter(title__icontains="python") # 忽略大小写 Book.objects.filter(title__startswith="py") # 等价于 title like 'py%' Book.objects.filter(title__endswith="aa") # 等价于 title like '%aa' Book.objects.filter(pub_date__year=2012) # 日期字段的2012年份 Student.objects.filter().excute(age=10) # 查询年龄不为10的学生 Student.objects.filter().excute(age__in=[10, 20]) # 查询年龄不在 [10, 20] 的学生 ##是否为空 User.objects.filter(username__isnull=True) # 查询用户名为空的用户 User.objects.filter(username__isnull=False) # 查询用户名不为空的用户 ## a)判等 条件名:exact。 # 例:查询名字为abc的图书。 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从大到小和书名进行排序。(多个) BookInfo.objects.all().order_by('-id','name') # 例:把id大于3的图书信息按阅读量从大到小排序显示。 BookInfo.objects.filter(id__gt=3).order_by('-bread') ##多表连接查询: class A(models.Model): name = models.CharField(u'名称') class B(models.Model): aa = models.ForeignKey(A) B.objects.filter(aa__name__contains='searchtitle') # 查询B表中外键aa所对应的表中字段name包含searchtitle的B表对象。 ##filter (or) 功能实现 from django.db.models import Q Novel.objects.filter( Q(novel_name__icontains = q) | Q(author__icontains = q))
分享到: