Book.objects.filter(id=1).delete()
使用update方法
Book.objects.filter(id=2).update(name="天龙八部")
注意:update()是QuerySet对象的一个方法,get返回的是一个model对象,其没有update方法.
filter返回的是一个QuerySet对象,filter里可以设定多个过滤条件
1、查询方法
filter(**kwargs) 包含了与所给筛选条件相匹配的对象
all() 查询所有结果
get(**kwargs) 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都是报错
values(*field) 返回一个ValueQuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
exclude(**kwargs) 包含了与所给的筛选条件不匹配的对象
order by(*field) 对查询结果排序
reverse() 对查询结果反向排序
distinct() 从返回结果中剔除重复记录
values_list(*field) 与values()非常相似,返回一个元组序列,values返回一个字典序列
count() 返回数据库中匹配的记录的数量
first() 返回数据库中匹配的对象的第一个对象
last() 返回数据库中匹配的对象的最后一个对象
exists() 判断一个对象集合中是否包含指定对象,包含返回True,不包含返回False
exclude() 排除满足条件的对象
annotate() 使用聚合函数
dates() 根据日期获取查询集
datetimes() 根据时间获取查询集
none() 创建空的查询集
union() 并集
intersection() 交集
difference() 差集
select_related() 附带查询关联对象
prefetch_related() 预先查询
extra() 附加SQL查询
defer() 不加载指定字段
only() 只加载指定的字段
using() 选择数据库
select_for_update() 锁住选择的对象,直到事务结束。
raw() 接收一个原始的SQL查询
1.filter():
filter(**kwargs)
返回满足查询参数的对象集合。
查找的参数(**kwargs)应该满足下文字段查找中的格式。多个参数之间是和AND的关系。
Student.objects.filter(age__lt=10)#查询满足年龄小于10岁的所有学生对象
2.exclude()
exclude(**kwargs)
返回一个新的QuerySet,它包含不满足给定的查找参数的对象
Student.objects.exclude(age__gt=20, name=‘lin‘)#排除所有年龄大于20岁且名字为“lin”的学员集
3.order_by():
order_by(*fields)
默认情况下,根据模型的Meta类中的ordering属性对QuerySet中的对象进行排序
Student.objects.filter(school="阳关小学").order_by(‘-age‘, ‘name‘)
上面的结果将按照age降序排序,然后再按照name升序排序。"-age"前面的负号表示降序顺序。 升序是默认的。 要随机排序,使用"?",如下所示:
Student.objects.order_by(‘?‘)
4. reverse():
reverse()
反向排序QuerySet中返回的元素。 第二次调用reverse()将恢复到原有的排序。
如要获取QuerySet中最后五个元素,可以这样做:
my_queryset.reverse()[:5]
这与Python直接使用负索引有点不一样。 Django不支持负索引。
5.distinct():
distinct(*fields)
去除查询结果中重复的行。
默认情况下,QuerySet不会去除重复的行。当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。
like:
__contains 包含 like ‘%aaa%‘
__icontains 包含,忽略大小写 ilike ‘%aaa%‘,但是对于sqlite来说,contains的作用效果等同于icontains。
in:
__in
查询在某一范围的书
Book.objects.filter(publish__in=[10, 20, 30])
is null / is not null:
__isnull 判空
Book.objects.filter(name__isnull=True) // 查询用户名为空的书
Publish.objects.filter(name__isnull=False) // 查询用户名不为空的书
不等于/不包含于:
Book.objects.filter().excute(publishe=10) // 查询出版社不为10的书
Book.objects.filter().excute(publish__in=[10, 20]) // 查询出版社不在 [10, 20] 的书
其他常用模糊查询:
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
b、双下划线(__)之多表条件查询
正向查找(条件)之一对一查询
#查询书名为"python"的书的id号
res3=Book.objects.filter(title="python").values("id")
print(res3)
正向查找(条件)之一对多查询
#查询书名为"python"的书对应的出版社的地址
res4=Book.objects.filter(title="python").values("publisher__city")
print(res4)
#查询"aaa"作者所写的所有的书的名字
res5=Book.objects.filter(author__name="aaa").values("title")
print(res5)
#查询"aaa"作者所写的所有的书的名字(与上面的用法没区别)
res6=Book.objects.filter(author__name="aaa").values("title")
print(res6)
反向查找之一对多查询
#查询出版了书名为"python"这本书的出版社的名字
res7=Publisher.objects.filter(book__title="python").values("name")
print(res7)
#查询写了书名为"python"的作者的名字
res8=Publisher.objects.filter(book__title="python").values("book__authors")
print(res8)
反向查找之多对多查询
#查询所写的书名为"python"的作者的名字
res9=Author.objects.filter(bool__title="python").values("name")
print(res9)
条件查询即与对象查询对应,是指filter,values等方法中的通过__来明确查询条件
4.3F查询和Q查询
F查询专门取对象中某列值的操作,F的作用:用来批量修改数据的
#导入F
from django.db.models import F
#把table1表中的num列中的每一个值在的基础上加10
table1.objects.all().update(num=F("num")+10)
Q构建搜索条件, Q的作用:Q是用来做条件查询的
#导入Q
from django.db.models import Q
Q对象可以对关键字参数进行封装,从而更好的应用多个查询
#查询table2表中以"aaa"开头的所有的title列
q1=table2.objects.filter(Q(title__startswith="aaa")).all()
print(q1)
Q对象可以组合使用&,|操作符,当一个操作符是用于两个Q对象时,会产生一个新的Q对象
#查找以"aaa"开头,或者以"bbb"结尾的所有title
Q(title__startswith="aaa") | Q(title__endswith="bbb")
Q对象可以用"~"操作符放在表达式前面表示否定,也可允许否定与不否定形式的组合
#查找以"aaa"开头,且不以"bbb"结尾的所有title
Q(title__startswith="aaa") & ~Q(title__endswith="bbb")
Q对象可以与关键字参数查询一起使用,Q对象放在关键字查询参数的前面
查询条件:
#查找以"aaa"开头,以"bbb"结尾的title且书的id号大于4的记录
Q(title__startswith="aaa") | Q(title__endswith="bbb"),book_id__gt=4
关联查询:
1、如果filter中的条件不是当前的模型类字段,而是关联的模型字段做条件时,
需要在字段名前多加 关联的
模型名小写__(双下划线)
#多查一(一.object.filter(多的模型名小写__多的模型的属性值=值))
BookInfo.object.filter(heroinfo__name="郭靖")#查询哪本书有郭靖这个人物
BookInfo.object.filter(heroinfo__name__contains="靖")#查询哪本书的人物名字中含有靖字
2、当模型中有外键时写 关联的
外键,没有外键写 关联的
模型名小写__(双下划线)
#HeroInfo.object.filter(bookinfo__id=1)#查询书id为1的所有英雄
#一查多(多.object.filter(外键(一的模型名小写)__一的模型的属性值=值))
HeroInfo.object.filter(hbook__id=1)#查询书id为1的所有英雄
原文:https://www.cnblogs.com/xingchengzc/p/14616186.html