使用Python3和
cursor.execute(sql, {key1: val1, key2: val2})
语法,我想执行一个安全的(SQL注入证明)查询,例如:
SELECT * FROM `table`
WHERE
a = %(fieldA)s AND b IN (%(fieldB)s)
基本上,我正在寻找this question的答案,但要使用Python3语法并使用多个字段。
如果我使用@nosklo的答案:
format_strings = ','.join(['%s'] * len(list_of_ids))
cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings,
tuple(list_of_ids))
1)如何使用字典语法实现这种双重格式语法(format_strings, tuple(list_of_ids))
):
cursor.execute(sql, {'field': 'val'})
2)以及在有多个字段的情况下如何实现它:
cursor.execute(sql, {'x': 'myList', 'y':myOtherVar'})
?
答案 0 :(得分:0)
好的,我想我刚刚发现了它:
myList = ["a", "b", "c"]
myStr = "d"
sql = """SELECT * FROM `table`
WHERE
a = %(myStr)s AND b IN %(myList)s"""
cursor.execute(sql, {
myList: myList,
myStr: myStr
})
之前一直尝试使用IN (%(myStr)s)
而不是IN %(myStr)s
。
我仍然不明白为什么有些人声称在这种情况下我们必须使用元组,因为列表工作得很好。