2011-12-27 69 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模型中的字段名称。在许多情况下,字段名称和列名称将相同,但如果不同,请注意使用列名称。