【问题标题】:How to use Sqlite string pattern matching from Django?如何使用 Django 中的 Sqlite 字符串模式匹配?
【发布时间】:2022-01-26 23:29:14
【问题描述】:

如果我在 Django 模型中有一个 CharField,并且我尝试使用带有 LIKE 运算符的字符串模式来过滤它,例如:

MyModel.objects.filter(text__like='he_lo')

Django 返回错误:

django.core.exceptions.FieldError: Unsupported lookup 'like' for CharField or join on the field not permitted.

但是,如果我使用 manage.py dbshell 运行原始 SQL:

select * from myapp_mymodel where text like 'he_lo';

它运行得很好。

为什么 Django 不允许在它的 ORM 中进行模式匹配,即使 Sqlite 支持它?

【问题讨论】:

  • this 回答你的问题了吗?
  • @RichardNeumann 有点像。 Django 的__containsLIKE 的包装,而不是简单的别名。
  • @RichardNeumann 这个问题也不是指 Sqlite。 __contains 后缀似乎也不支持 SQL 通配符,尽管 Sqlite 支持它们。

标签: python django sqlite


【解决方案1】:

你可以试试raw这样的查询:

 objs = MyModel.objects.raw(
     "SELECT * FROM myapp_mymodel WHERE text LIKE %s", ['%he_lo']
 )
 for obj in objs:
    # do something

【讨论】:

  • @cerin 如果这解决了您的问题,请不要忘记将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
相关资源
最近更新 更多