Django中使用sqlite进行查询过滤

1 投票
2 回答
3821 浏览
提问于 2025-04-16 03:42

我尝试了以下这个Django的查询,

def search(search_text):
    q  = Info.objects.filter(title__contains=str(search_text))
    print q.query

打印出来的查询是

SELECT "d"."id", "d"."foo" FROM "d_info" WHERE "d_info"."title" LIKE %hello% ESCAPE '\' 

这个查询失败了,因为LIKE后面的文本没有加引号。当我在sql提示符下运行这个查询,并在LIKE后面的文本加上引号时,查询就成功了,如下所示

SELECT "d"."id", "d"."foo" FROM "d_info" WHERE "d_info"."title" LIKE '%hello%' ESCAPE '\' 

我该如何让Django在search_text周围加上引号,这样查询就能成功呢?

我正在使用Django和sqlite3。

2 个回答

1

我在Postgresql 8.3上试过这个。生成的查询没有加引号。不过执行这个过滤器时,返回了一个有效的查询结果,里面有我预期的实例。你能试着执行一下

q = Info.objects.filter(title__contains=str(search_text))
print q.count()

看看是否能成功吗?

0

把我上面的评论发成答案

结果发现这个查询在Django里是能用的,但当我让它打印出查询语句,然后把打印出来的查询复制到mysql或sqlite的命令行里执行时,却不行。可能是Django打印的查询语句有问题。

撰写回答