开发者社区> 问答> 正文

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

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

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注入的影响。)

展开
收起
保持可爱mmm 2020-05-11 10:46:57 429 0
1 条回答
写回答
取消 提交回答
  • 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

    2020-05-11 10:47:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载