【问题标题】:Incrementing values in django database在 django 数据库中递增值
【发布时间】:2012-07-04 04:30:48
【问题描述】:

我想增加数据库中的值,而不必对数据库执行命中来查找实际值。实际上,我想做这样的事情......但这不起作用。任何优雅的解决方案?

P.objects.filter(username='John Smith').update(accvalue+=-50)

谢谢!

【问题讨论】:

    标签: database django


    【解决方案1】:

    查看 Django 的F() object

    您可以将其与update() 方法结合使用,以根据previos 字段值更新值,即

    >>> from django.db.models import F
    >>> P.objects.filter(username="John Smith").update(accvalue=F("accvalue") + 50)
    

    这将使用数据库的原生 UPDATE 方法来做你想做的事情。

    【讨论】:

    • 比使用常规保存方法更好,并且在该线程安全之上:)
    • 我可以在不再次查询的情况下获得增量值吗?这将避免并发访问的问题
    • 我也可以使用相同的递减吗?
    • @Don,没办法。您必须 object.refresh_from_db() 才能获得新值。因为 F 表达式的更新是由数据库完成的,而不是 django。所以,django 不知道真正的价值。
    • @TianLoon 你是对的。 OP 实际上询问了如何增加 DB 中的值...然后您必须刷新对象以获取更新的值。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多