从django.db.connection搜索正则表达式?

时间:2015-04-16 15:58:41

标签: python django

这适用于psql控制台:

SELECT * FROM chemical WHERE name ~* 'statin';

但不是来自Django内部:

from django.db import connection
cursor = connection.cursor()
code = 'statin'
query = 'SELECT * FROM chemical WHERE name ~* %s'
print query
cursor.execute(query, (code,))
print cursor.fetchall()

这在Django控制台上打印出来:

SELECT * FROM chemical WHERE name ~* %s 

但它返回一个空的查询集。

如何从Django内部进行正则表达式搜索?我想我需要逃避或忘记一些事情。

不幸的是chemical是物化视图,因此我无法使用Django ORM。

2 个答案:

答案 0 :(得分:1)

我想,你需要这个:

from django.db import connection
cursor = connection.cursor()
code = 'statin'
query = 'SELECT * FROM chemical WHERE name ~* {}'
print query.format(code)
cursor.execute(query.format(code))
print cursor.fetchall()

与Django没有任何关系,你必须正确格式化字符串。

答案 1 :(得分:0)

实际上,Django ORM可以使用__regex查找为您执行正则表达式查找,如下所示:https://docs.djangoproject.com/en/1.8/ref/models/querysets/#regex

或者,正如您在那里一样,使用__iregex查找不区分大小写的正则表达式:https://docs.djangoproject.com/en/1.8/ref/models/querysets/#iregex

相关问题