「Django框架」F表达式与Q表达式

 Django中的F/Q表达式用于数据库操作。

1.F()表达式

 Django使用F()对象生成一个描述数据库级别操作所需的sql语句,使用F()对象可以直接引用模型字段的值并执行数据库操作而不用将它们导入到python的内存中,从而高效地完成批量数据操作。
如一般要操作数据,需:

employees = Employee.objects.filter(post="Manager")
for employee in employees:
	employee.salary += 100
	employee.save()

以上代码将数据从数据库中取出,放入内存中并使用python运算符操作,再将对象保存到数据库中,而若使用F表达式:

from django.db.models import F
employees = Employee.objects.filter(post="Manager")
employees.salary = F("salary")+100
employees.save()

其中虽然reporter.stories_field = F('stories_field') + 1看起来像常规的python表达式,但实际上它是一个描述数据库操作的sql结构。
 当Django遇到F()实例,会覆盖标准的python来创建封装的的sql表达式,其中对数据的操作完全由数据库来处理,对于字段的值python完全不知道。
 而通过F()表达式处理的数据,必须重新加载后才能够获取其新值(即重新从数据中出选出):

employees = Employee.objects.filter(post="Manager")

 或使用更简洁的操作:

employees.refresh_from_db()

 而通过F().update()方法的结合,可以更加简便地更新数据:

Employee.objects.update(salary=F(“salary”)+1000)

需记住,F()表达式用于从数据库中加载数据的一步。

2.Q()表达式

 对于筛选数据时的运算,可以同时传入多个条件来实现。而Q()表达式,可以实现或|且&~非等逻辑运算。
示例代码:

from django.db.models import Q
books = Book.objects.filter(Q(id=3)|Q(name__contains("记")))
books = Book.objects.filter(Q(price__get=100)&Q(name__contains("记")))
books = Book.objects.filter(Q(id=3)&~Q(name__contains="记"))

F()表达式用于加载数据,Q()表达式用于逻辑运算。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值