Django的:SQLite和查询
问题描述:
我使用Django与PostgreSQL数据库的正则表达式和这个查询工作正常:Django的:SQLite和查询
REQUEST_TYPE_ENTRANCE = 1
REGEX_ENTRANCE = r'^{0},|,{0},|,{0}$|^{0}$'.format(
REQUEST_TYPE_ENTRANCE
)
entrance_registers = EntranceRegister.objects.filter(authorized_requests__regex=REGEX_ENTRANCE)
但是,当我运行SQLite数据库测试中,它不返回任何结果。
这里是print EntranceRegister.objects.filter(authorized_requests__regex=REGEX_ENTRANCE).query
输出:
SELECT "porter_entranceregister"."id", "porter_entranceregister"."status", "porter_entranceregister"."authorized_requests", "porter_entranceregister"."gone_at", "porter_entranceregister"."created_at"
FROM "porter_entranceregister"
WHERE "porter_entranceregister"."authorized_requests"
REGEXP ^1,|,1,|,1$|^1$ ORDER BY "porter_entranceregister"."created_at"
DESC
我想,这个问题可能是在这里失踪报价:https://github.com/django/django/blob/master/django/db/backends/sqlite3/base.py#L129,但是当我在我的virtualenv修改了这个文件,它失败
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 6, and there are 7 supplied.
答
默认情况下,SQLite没有实现REGEXP操作符。 (如果是这样,第二个操作数将由字符串必须。)
你可以得到喜欢同样的效果:当您运行`./manage dbshell命令
... WHERE reqs LIKE '1,%' OR reqs LIKE '%,1,%' OR reqs LIKE '%,1' OR reqs = '1'
它的工作原理'? – FeedTheWeb 2015-03-02 15:34:58
@lxer它返回:''OperationalError:无法识别的令牌:“^”'' – vero4ka 2015-03-02 15:44:13