【发布时间】:2011-12-29 06:05:39
【问题描述】:
我正在寻找一种方法来做到这一点:
qs = MyModel.objects.filter(mystring__like="____10____")
#Which would create a sql clause
... LIKE '____10____'
而不是像这样表现:
qs = MyModel.objects.filter(mystring__icontains="____10____")
#Which creates a sql clause
... LIKE %\_\\_\\_\\_10\\_\\_\\_\\_%
我知道我可以使用正则表达式过滤器,但这比仅使用内置的 mysql 通配符功能要慢得多,而且更容易出错(我已经直接在 mysql 中测试过,查询字符串足够长,区别在于大量)。
编辑: 在 madisvain 的帮助下,想出了如何使用 .extra() 方法做到这一点。
qs = MyModel.objects.extra(where=["`mystring` LIKE '____10____'"])
在性能差异方面,2000 次随机查询使用 regex 方法耗时 20.5 秒,使用这种方法 2000 次随机查询耗时 6 秒。
【问题讨论】:
标签: python django django-models