F()表达式
使用 F() 对象可以直接引用模型字段的值并执行数据库操作而不是将它们导入到python的内存中再进行操作,这样可以高效地完成批量数据操作。
举例说明
- 在不使用 F() 表达式的情况下,如果我们想将所有书籍的价格都提高50元时,我们可以这样进行书写代码
books = Book.objects.all() for book in books: book.price += 50 book.save()
- 使用 F() 表达式与 update() 方法结合进行修改书籍的价格
from django.db.models import F books = Book.objects.update(price=F('price')+50)
- 不使用 F() 表达式查询 name 字段和 emai 字段值相同的数据信息
authors = Author.objects.all() for author in authors: if author.name == author.email: print(author)
- 使用 F() 表达式查询 name 字段和 emai 字段值相同的数据信息
from django.db.models import F authors = Author.objects.filter(name=F("email"))
Q()表达式
Q() 表达式,可以实现或|、且&、非~ 等逻辑运算。
举例说明
- 查询书籍id号为1或书名为红楼梦的图书信息
from django.db.models import Q books = Book.objects.filter(Q(id=1) | Q(name='红楼梦'))
- 查询书籍书名为三国演义且价格为98的图书信息
from django.db.models import Q book = Book.objects.filter(Q(name='三国演义') & Q(price=98))
- 查询 书名 不是三国演义的书籍信息
from django.db.models import Q books = Book.objects.filter(~Q(name='三国演义'))