Django之F()函数

F()函数

F()函数的导入

from django.db.models import F

为什么要使用F()函数?

一个 F()对象代表了一个model的字段值或注释列。使用它就可以直接参考model的field和执行数据库操作而不用再把它们(model field)查询出来放到python内存中。

作为代替,Django使用 F()对象生成一个SQL表达式,来描述数据库层级所需要的操作

这些通过一个例子可以很容易的理解。往常,我们会这样做:

普通方式

reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed += 1 # 放到内存中,使用python计算,然后通过save方法保存
reporter.save()

使用F表达式 (简单使用)

rom django.db.models import F

reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed = F('stories_filed') + 1
reporter.save()

虽然看上去和上面的内存Python操作相似,但事实上这是一个描述数据库操作的sql概念
当django遇到F()实例,它覆盖了标准的Python运算符创建一个封装的SQL表达式。在这个例子中,reporter.stories_filed就代表了一个指示数据库对该字段进行增量的命令。
无论reporter.stories_filed的值是或曾是什么,Python一无所知–这完全是由数据库去处理的。所有的Python,通过Django的F() 类,只是去创建SQL语法参考字段和描述操作

注意:

使用F()函数保存值后,再次使用实例调用并不能拿到新的值.这是因为F()函数是数据库操作,并不是在内存中python进行的,所以之前拿到的实例存储的还是之前的值.所以需要重新载入实例(即重新获取实例)

普通方式

>>reporter = Reporters.objects.get(name='Tintin')
>>reporter.stories_filed
10
>>reporter.stories_filed += 1
>>reporter.stories_filed  # 普通方式是在内存中执行的,所以就算不保存也能拿到值,值是存储在内存中的
11                      # 这个时候数据库中的值还是10,因为没有save
>>reporter.save()  # 保存之后才会去更改数据库
>>reporter.stories_filed
11

F()函数

>>from django.db.models import F
>>reporter = Reporters.objects.get(name='Tintin')
>>reporter.stories_filed
10
>>reporter.stories_filed = F('stories_filed') + 1
>>reporter.stories_filed
10
>>reporter.save()
>>reporter.stories_filed
10
>>reporter = Reporters.objects.get(name='Tintin')  # 重新载入实例之后就是最新的数据
>>reporter.stories_filed
11

F()函数配合update可以优化效率,不再需要使用get()和save()方法

更新单个实例

reporter = Reporters.objects.filter
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值