【问题标题】:using sql concat() in django for concatenating two columns在 django 中使用 sql concat() 连接两列
【发布时间】:2014-11-18 20:02:34
【问题描述】:

假设我在 MySQL 中有一个表 xyz,它有三列:col1、col2 和 col3(都是 varchar)。我在使用此模型的服务器上使用 python 和 Django。现在我想在 Django ORM 中编写一个表达式,它应该会在 MySQL 中产生这个查询:

SELECT * FROM xyz WHERE col3 != CONCAT(col1, col2)

我知道 Django filter/exclude,但不是基于固定值而不是列的过滤器:

xyz.objects.exclude(col3='something')

xyz.objects.filter(col3='something')

(PS:如果一列包含其他列的冗余信息,我知道这是一个糟糕的表格设计)

【问题讨论】:

    标签: python mysql sql django


    【解决方案1】:

    Django>=1.8 这也是可能的:

    from django.db.models.functions import Concat
    queryset = xyz.objects.exclude(col3=Concat('col1', 'col2'))
    

    【讨论】:

    • 谢谢,但我早就搬走了那个项目和公司... :)
    【解决方案2】:

    您必须为此使用一些 SQL。要么raw

    xyz.objects.raw("SELECT * FROM xyz WHERE col3 != CONCAT(col1, col2)")
    

    extra:

    xyz.objects.extra(where=["col3 != CONCAT(col1, col2)"])
    

    【讨论】:

    • 我不明白你的意思。这两个都返回 Django 模型。
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 2011-09-21
    • 2022-08-19
    • 1970-01-01
    • 2019-06-04
    • 2010-09-26
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多