Django ORM下划线通配符

时间:2019-03-14 22:04:22

标签: sql django orm

我一直在寻找一种使用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%'

谢谢!

3 个答案:

答案 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 语句中使用的两个特殊字符——百分号和下划线。