- F查询
查询条件是字段间的比较
class Book(models.Model):
title = models.CharField(max_length=32)
buy_num=models.BigIntegerField()
keep_num=models.BigIntegerField()
查询所有购买数大于收藏数的书籍
Book.objects.filter(buy_num__gt=F("keep_num"))
<QuerySet [<Book: Book object>, <Book: Book object>]>
for i in Book.objects.filter(buy_num__gt=F("keep_num")):
print(i.title)
打印结果:
django
c++
扩展的两个:
①将每种书籍的购买数+1000
Book.objects.all().update(buy_num=F("buy_num")+1000)
返回结果是3,表示执行了三条记录
②将所有书籍的名字前面加上“最新版”三个字
from django.db.models.functions import Concat
from django.db.models import Value
Book.objects.filter().update(title=Concat( Value("计算机出版社"),F("title"),Value("最新版")))
注意:filter()如果不传参数的话,表示取所有的,等价于all()
2.Q查询
| 表示取或
& 表示取且
~ 表示取反
Q(条件1) | Q(条件2)
Q(条件1) & Q(条件2)
Q(条件1) & ~Q(条件2)
当Q查询和关键字查询都有的时候,Q查询要写在前面
from django.db.models import F,Q
Book.objects.filter(Q(title__contains="c++")|Q(buy_num__gt=1000),keep_num__lt=9)
打印结果:
<QuerySet [<Book: Book object>]>
Book.objects.filter(Q(title__contains="c++")|Q(buy_num__gt=1000),keep_num__lt=9).first().title
打印结果:
'计算机出版社c++最新版'
网友评论