在django中使用sql concat()来连接两列

时间:2014-09-24 10:50:29

标签: python mysql sql django

我想说我在MySQL中有一个表xyz,它有三列:col1,col2和col3(所有varchar)。我正在使用带有Django的python为我的服务器使用这个模型。现在我想在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:我知道如果一列包含来自其他列的冗余信息,那么表格设计会很糟糕)

2 个答案:

答案 0 :(得分:2)

你必须为此使用一些SQL。 raw

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

extra

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

答案 1 :(得分:2)

Django>=1.8中,这也是可能的:

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