有包含方法,但它表示:WHERE field LIKE '%10%'
。而我正好需要WHERE field LIKE '10__8__0__'
。Django query how to write:WHERE field LIKE'10__8__0__'?
谢谢!
编辑:
我的意思是字符串是'10xx8xx0xx'
,其中x - 任何符号
有包含方法,但它表示:WHERE field LIKE '%10%'
。而我正好需要WHERE field LIKE '10__8__0__'
。Django query how to write:WHERE field LIKE'10__8__0__'?
谢谢!
编辑:
我的意思是字符串是'10xx8xx0xx'
,其中x - 任何符号
对不起,我忘了澄清我想要的东西去做。看到我的编辑 – 2011-12-27 11:56:35
这是有效的,但因为我要搜索'%query%',所以我决定只使用field__contains – radtek 2014-12-15 14:25:11
这比__contains更灵活,为什么不在默认情况下包含在Django中?它应该在django中添加,而不是替换__contains。 – 2016-03-08 14:27:54
执行您打算执行搜索的最简单方法是定期表达:
MyModel.objects.filter(field__regex=r'^10..8..0..$')
编辑:
我的解决办法是可能比LIKE慢得多。但问题是,django ORM不允许轻松访问LIKE
。如果startswith
或endswith
已经足够满足您的需要,那将是最简单的。
它比'LIKE'慢得多,至少对于MySQL来说。 – DrTyrsa 2011-12-27 12:33:19
这可行,但效率不如此类。为什么不存在这样的东西? MyModel.objects.filter(field__like = '10%8 0%')。如果ORM不检查字符串,你可以这样做:MyModel.objects.filter(field = '10%8&0%') – Goin 2011-12-27 12:37:53
@DTTyrsa慢得多,但它也是你的解决方案o_O。 Till-Backhaus解决方案后的解决方案 – Goin 2011-12-27 12:41:16
在SQL中,你可以查询,如:
WHERE field LIKE '10??8??0??'
尝试在你的Django过滤器。
这在django的默认查找中是不可能的。因此,我实现了类似于django的http://pypi.python.org/pypi/django-like – Goin 2011-12-29 02:03:03
您可以使用extra
做到这一点:
MyModel.objects.extra(where=["column_name LIKE '%10%"])
注意column_name
是在数据库中的列名,而不是在你的Django模型中的字段名称。在许多情况下,字段名称和列名称将相同,但如果不同,请注意使用列名称。
通过'raw'做到这一点,https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw – Ahsan 2011-12-27 13:49:11