如何在Django SQL格式中转义引号

时间:2018-11-11 22:56:48

标签: python sql django

我有以下代码:

# 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 \

做上述事情的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

这可能是一种非常愚蠢的方法,但是一种方法是将两种不同类型的字符串格式组合如下:

sql = "SELECT * FROM mturk_imdb WHERE (MATCH(name) against(%s)) AND (imdb_id NOT IN %s) LIMIT 20 UNION SELECT * FROM mturk_imdb WHERE name=%s AND (imdb_id NOT IN %s) LIMIT 30" % ('%s', imdb_ids_as_tuple_str, '%s', imdb_ids_as_tuple_str)
items = list(Item.objects.raw(sql, (q, q)))

在需要确切的未转义字符串的地方,可以使用%;在要转义用户输入的数据的地方,可以使用, (params)