我知道如何将列表映射到字符串:
foostring = ",".join( map(str, list_of_ids) ) 而且我知道我可以使用以下命令将该字符串放入IN子句中:
cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring)) 我需要使用MySQLDB安全地完成同一件事(避免SQL注入)。在上面的示例中,由于foostring没有作为执行参数传递,因此它很容易受到攻击。我还必须在mysql库之外引用和转义。
(有一个相关的SO问题,但是那里列出的答案对MySQLDB不起作用或容易受到SQL注入的影响。)
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注入。
请注意,数据(list_of_ids)作为参数直接进入mysql的驱动程序(不在查询文本中),因此没有注入。您可以在字符串中保留所需的任何字符,而无需删除或引用字符。
来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。