【发布时间】:2018-11-11 22:56:47
【问题描述】:
我有以下代码:
# looks like: "('tt1098327','tt3819668','tt0049251')", <type 'str'>
ids_as_string = "(-1)" if not ids else ("('" + "','".join(ids).strip("',") + "')")
items = list(Item.objects.raw("""SELECT * FROM mturk_imdb WHERE (MATCH(name) against(%s)) AND (imdb_id NOT IN %s)""", (q, ids_as_string )))
问题在于 sql 格式化程序试图转义我为元组添加的引号:
DatabaseError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 ''(\'tt1098327\',\'tt3819668\' 附近使用的正确语法, \'tt0049251\',\'tt3878722\
执行上述操作的正确方法是什么?
【问题讨论】:
-
你能告诉我
ids是什么吗? -
你到底想做什么?你想创建一个 ids 元组用作 sql 中的变量
-
你为什么用逗号加入,然后又去掉逗号?
-
你为什么将其作为原始 SQL 而不是 ORM 查询,它会处理所有相关的转义?
-
@DanielRoseman 如果您可以向我展示如何将其作为常规 ORM 查询进行操作,我完全赞成 - 请注意,查询中还有一个联合(上面未提及)并应用了两个限制,所以不是一个简单的查询。