2014-09-24 75 views
1

假设我在MySQL中有一个xyz表,它有三列:col1,col2和col3(all varchar)。我使用python与Django为我的服务器使用此模型。现在,我想要写在Django ORM这将导致该查询在MySQL的表达式:在django中使用sql concat()连接两列

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

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

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

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

(PS:我知道这是一个坏表设计,如果一列包含来自其他列冗余信息)

回答

2

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

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

extra

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

所以水湿使用Django模型来完成? – constantine1 2014-09-24 12:15:19

+0

我不知道你的意思。这两个都返回Django模型。 – 2014-09-24 12:18:46

1

Django>=1.8这也是可能的:

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

谢谢,但是很久以前我搬出了那个项目和公司...... :) – constantine1 2015-12-08 14:16:10