【问题标题】:Django: Sqlite and regex in queryDjango:查询中的 Sqlite 和正则表达式
【发布时间】:2015-05-03 00:21:12
【问题描述】:

我将 Django 与 PostgreSQL 数据库一起使用,此查询运行良好:

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.

【问题讨论】:

  • 使用./manage dbshell 运行命令是否有效?
  • @lxer 返回:OperationalError: unrecognized token: "^"

标签: python regex django sqlite django-models


【解决方案1】:

默认情况下,SQLite 不实现 REGEXP 运算符。 (如果是,第二个操作数必须是一个字符串。)

你可以用 LIKE 得到同样的效果:

... WHERE reqs LIKE '1,%' OR reqs LIKE '%,1,%' OR reqs LIKE '%,1' OR reqs = '1'

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-09-12
  • 2011-07-01
  • 2014-10-08
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多