Django中使用sqlite进行查询过滤
我尝试了以下这个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打印的查询语句有问题。