前言
做个记录,方便以后使用
一、基本操作
1.增删改查
Obj为模型类对象
# 添加一条数据,data是一个字典,**data可以展开字典
Obj.objects.create(**data)
# 删除一条数据,get里面写待删除数据满足的条件
Obj.objects.get(id=id).delete()
# 更新数据,filter里面写待删除数据满足的条件,data是一个字典,**data可以展开字典
Obj.objects.filter(id=id).update(**data)
# 查询数据,获取单条数据
Obj.objects.get(id=id)
# 查询数据,获取多条数据
Obj.objects.filter(sex="男")
# 获取所有数据
Obj.objects.all()
2.复杂的增删改查
# 删除所有满足条件的数据
Obj.objects.filter(sex="男").delete()
# 模糊查询
Obj.objects.filter(name__contains="李")
# 查询age大于20的数据,__gte:大于等于;__lt:小于;__lte:小于等于
Obj.objects.filter(age__gt=20)
# 查询名字中不带有‘李’的数据
Obj.objects.exclude(name__contains="李")
# 查询名字以‘李’开头的数据,name__endswitch:查询以某字符为结尾的数据
User.objects.filter(name__startswith="李")
3.其他操作
# 降序排序,不加-号是升序
Obj.objects.order_by('-name')
二、高阶操作
1.F查询
作用:可以获取对应字段属性并进行操作
from django.db.models import F,Q
#F 可以获取对象中的字段的属性(列),并且对其进行操作;
models.Book.objects.all().update(price=F('price')+1) #对图书馆里的每一本书的价格 上调1块钱
2.Q查询
作用:将查询条件使用逻辑关系(&、|、~)组合起来
语法:
fifter(Q(查询条件1)| Q(查询条件2))
fifter(Q(查询条件2)& Q(查询条件3))
fifter(Q(查询条件4)& ~Q(查询条件5))
fifter(Q(查询条件6)| Q(Q(查询条件4)& ~ Q(Q(查询条件5)& Q(查询条件3)))包含
from django.db.models import F,Q
# 1、F 可以获取对象中的字段的属性(列),并且对其进行操作;
# models.Book.objects.all().update(price=F('price')+1)
# 2、Q多条件组合查询
#如果 多个查询条件 涉及到逻辑使用 fifter(,隔开)可以表示与,但没法表示或非得关系
#查询 书名包含作者名的书
book=models.Book.objects.filter(title__icontains='伟',author__name__contains='伟').values('title')
#如何让orm 中得 fifter 支持逻辑判断+多条件查询? Q()登场
book=models.Book.objects.filter(Q(title__icontains='伟') & Q(author__name__contains='伟')).values('title')
book=models.Book.objects.filter(Q(author__name__contains='伟') & ~Q(title__icontains='伟')).values('title')
#多条件包含组合查询
#查询作者姓名中包含 方/少/伟/书名包含伟3字 并且出版社地址以山西开头的书
book=models.Book.objects.filter(
Q(
Q(author__name__contains='方') |
Q(author__name__contains='少') |
Q(title__icontains='伟')|
Q(author__name__contains='伟')
)
&
Q(publish__addr__contains='山西')
).values('title')
print(book)
return HttpResponse('OK')
注意:Q查询条件和非Q查询条件混合使用注意,不包Q()的查询条件一点要放在Q(查询条件)后面