我一直在寻找一种使用Django ORM来使用SQL下划线通配符的方法,并执行与此等效的操作:
SELECT * FROM table
WHERE field LIKE 'abc_wxyz'
当前,我正在做
field_like = 'abc_wxyz'
result = MyClass.objects.extra(where=["field LIKE " + field_like])
我已经尝试了contains()和icontains(),但这不是我所需要的,因为它所做的是在查询中添加括号:
SELECT * FROM table
WHERE field LIKE '%abc/_wxyz%'
谢谢!
答案 0 :(得分:0)
您可以使用field__contains
attribute。
例如:
MyClass.objects.filter(field__contains='abc_wxyz')
这等效于:
SELECT * FROM MyClass WHERE field LIKE 'abc_wxyz'
答案 1 :(得分:0)
您可以使用 __ regex 查找来构建比 __ contains , __ startswith 或 __ endswith (可以在每个字符的开头添加“ i”字符,以使查询不区分大小写,例如icontains。就您而言,我认为
MyClass.objects.filter(field__regex=r'^abc.wxyz$')
会做你想做的事。
答案 2 :(得分:0)
埃尔隆勋爵的回答是错误的。 Django 将所有开发人员提供的通配符转义为 LIKE 类型的查找。该语句等效于
SELECT * FROM MyClass WHERE field LIKE '%abc/_wxyz%'
(正如 OP 发现的那样)和下划线无效。
见Escaping percent signs and underscores in LIKE statements
<块引用>等同于 LIKE SQL 语句(即,exact、contains、icontains、startswith、istartswith、endswith 和 iendswith)的字段查找将自动转义 LIKE 语句中使用的两个特殊字符——百分号和下划线。