当前位置:  开发笔记 > 编程语言 > 正文

在python MySQLDB IN子句中使用列表

如何解决《在pythonMySQLDBIN子句中使用列表》经验,为你挑选了1个好方法。

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

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注入攻击.)



1> nosklo..:

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注入.

请注意,data(list_of_ids)直接作为参数(不在查询文本中)直接转到mysql的驱动程序,因此没有注入.你可以在字符串中留下你想要的任何字符,不需要删除或引用字符.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有