【问题标题】:Django: Select where sum of columns equals some constantDjango:选择列总和等于某个常数的位置
【发布时间】:2012-10-04 13:50:04
【问题描述】:

我已经搜索了文档,但找不到像这样运行查询的简单方法:

SELECT columns FROM table WHERE col_a + col_b = @param

我知道我可以使用.extra(where=['col_a + col_b = %s' % whatever]),但这不是参数化的。

有没有办法在 ORM 中做到这一点(即没有extra)?否则,运行该查询的最简洁方式是什么?

【问题讨论】:

    标签: python sql django django-orm


    【解决方案1】:

    您可以尝试使用 F() 表达式进行过滤。 见这里:https://docs.djangoproject.com/en/dev/topics/db/queries/#filters-can-reference-fields-on-the-model

    试试这个:

    from django.db.models import F
    Something.objects.filter(col_a=CONST-F('col_b'))
    

    没有尝试过,但它可能会像这样工作:如果 CONST = 10 并且如果 B 列例如为 8,则仅当 A 列为 2 时才获取。

    【讨论】:

    • 是的,我想到了这个。我发现它很难阅读,如果我的表达更复杂(因为它必须完全重新排列),它会变得更糟。仍然可能是最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多