作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我知道如何将列表映射到字符串:
foostring = ",".join( map(str, list_of_ids) )
而且我知道我可以使用以下方法将该字符串放入 IN 子句中:
cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))
我需要的是使用 MySQLDB 安全地完成同样的事情(避免 SQL 注入(inject))。在上面的示例中,因为 foostring 没有作为参数传递给执行,所以它很容易受到攻击。我还必须在 mysql 库之外引用和转义。
(有一个 related SO question,但那里列出的答案要么不适用于 MySQLDB,要么容易受到 SQL 注入(inject)。)
最佳答案
直接使用list_of_ids
:
format_strings = ','.join(['%s'] * len(list_of_ids))
cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings,
tuple(list_of_ids))
这样就避免了自己引用,也避免了各种sql注入(inject)。
请注意,数据(list_of_ids
)作为参数(不在查询文本中)直接进入mysql的驱动程序,因此没有注入(inject)。您可以在字符串中保留任何您想要的字符,无需删除或引用字符。
关于python - 内爆列表以在 python MySQLDB IN 子句中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/589284/
我是一名优秀的程序员,十分优秀!