我知道如何將列表映射到字符串: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
提交
取消