gpt4 book ai didi

python - 内爆列表以在 python MySQLDB IN 子句中使用

转载 作者:IT老高 更新时间:2023-10-28 12:53:08 25 4
gpt4 key购买 nike

我知道如何将列表映射到字符串:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com