【发布时间】:2014-07-21 10:08:09
【问题描述】:
我将 Django 用于使用简单过滤系统的应用程序。我希望过滤器测试我的模型的标题是否包含查询字符串。
代码精简后如下所示:
cards = Card.objects.filter(title__icontains=query)
print cards.query
它返回以下查询(再次,不必要的东西被剥离):
SELECT [...] FROM `ygo_card_card`
WHERE `ygo_card_card`.`title` LIKE %dark%
它不返回任何结果,即使它应该返回。当我手动运行此查询时,我得到了
SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“%dark%”附近使用正确的语法
如果我在手动运行时将 %dark% 部分放在撇号 ('%dark%') 之间,它会按预期工作。在我看来,Django 创建了一个不正确的查询。这是一个错误还是我可以通过设置控制的东西?
任何搜索都会返回不相关的结果,因为相关的关键字过于笼统。
我使用 Django 1.6.5 和 MySQL 5.5.38,在 Ubuntu Server 14.04 LTS 上运行。
【问题讨论】:
-
您不应该依赖
.query的值来获取发送到数据库的实际查询,这并不总是真实的反映。 -
那我应该如何调试呢?查询非常简单,我确信至少有一个模型满足条件。
-
query的值是多少? -
写在帖子里,就在 Python 代码下面。
-
@CosminStamate 我的意思是将
query变量的值传递给filter()。
标签: python mysql sql django sql-like