我知道如何将列表映射到字符串:foostring = ",".join( map(str, list_of_ids) )而且我知道我可以使用以下命令将该字符串放入IN子句中:cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))我需要使用MySQLDB安全地完成同一件事(避免SQL注入)。在上面的示例中,由于foostring没有作为执行参数传递,因此它很容易受到攻击。我还必须在mysql库之外引用和转义。
3 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
无痛MySQLdb execute('...WHERE name1 = %s AND name2 IN (%s)', value1, values2)
def execute(sql, *values):
assert sql.count('%s') == len(values), (sql, values)
placeholders = []
new_values = []
for value in values:
if isinstance(value, (list, tuple)):
placeholders.append(', '.join(['%s'] * len(value)))
new_values.extend(value)
else:
placeholders.append('%s')
new_values.append(value)
sql = sql % tuple(placeholders)
values = tuple(new_values)
# ... cursor.execute(sql, values)
添加回答
举报
0/150
提交
取消