2014-09-24 15 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