2011-12-27 67 views
11

包含方法,但它表示:WHERE field LIKE '%10%'。而我正好需要WHERE field LIKE '10__8__0__'Django query how to write:WHERE field LIKE'10__8__0__'?

謝謝!

編輯:

我的意思是字符串是'10xx8xx0xx',其中x - 任何符號

+1

通過'raw'做到這一點,https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw – Ahsan 2011-12-27 13:49:11

回答

13

你可以用django-like做到這一點:

MyModel.objects.filter(field__like='10%8%0%') 

而且我創建的Django project site相關票

+0

對不起,我忘了澄清我想要的東西去做。看到我的編輯 – 2011-12-27 11:56:35

+0

這是有效的,但因爲我要搜索'%query%',所以我決定只使用field__contains – radtek 2014-12-15 14:25:11

+0

這比__contains更靈活,爲什麼不在默認情況下包含在Django中?它應該在django中添加,而不是替換__contains。 – 2016-03-08 14:27:54

5

執行您打算執行搜索的最簡單方法是定期表達:

MyModel.objects.filter(field__regex=r'^10..8..0..$') 

編輯:

我的解決辦法是可能比LIKE慢得多。但問題是,django ORM不允許輕鬆訪問LIKE。如果startswithendswith已經足夠滿足您的需要,那將是最簡單的。

+0

它比'LIKE'慢得多,至少對於MySQL來說。 – DrTyrsa 2011-12-27 12:33:19

+0

這可行,但效率不如此類。爲什麼不存在這樣的東西? MyModel.objects.filter(field__like = '10%8 0%')。如果ORM不檢查字符串,你可以這樣做:MyModel.objects.filter(field = '10%8&0%') – Goin 2011-12-27 12:37:53

+0

@DTTyrsa慢得多,但它也是你的解決方案o_O。 Till-Backhaus解決方案後的解決方案 – Goin 2011-12-27 12:41:16

-1

在SQL中,你可以查詢,如:

WHERE field LIKE '10??8??0??' 

嘗試在你的Django過濾器。

+0

這在django的默認查找中是不可能的。因此,我實現了類似於django的http://pypi.python.org/pypi/django-like – Goin 2011-12-29 02:03:03

4

您可以使用extra做到這一點:

MyModel.objects.extra(where=["column_name LIKE '%10%"]) 

注意column_name是在數據庫中的列名,而不是在你的Django模型中的字段名稱。在許多情況下,字段名稱和列名稱將相同,但如果不同,請注意使用列名稱。