P粉4349968452023-08-23 15:50:40
虽然这个问题很旧,但我想留下回复,以防其他人也在寻找我想要的东西
当我们有很多参数或者想要使用命名参数时,接受的答案会变得混乱
经过一些尝试
ids = [5, 3, ...] # id列表 cursor.execute(''' SELECT ... WHERE id IN %(ids)s AND created_at > %(start_dt)s ''', { 'ids': tuple(ids), 'start_dt': '2019-10-31 00:00:00' })
在python2.7
和pymysql==0.7.11
下测试通过
P粉2121146612023-08-23 00:26:09
直接使用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的驱动程序作为参数(而不是在查询文本中),因此没有注入问题。您可以在字符串中保留任何字符,无需删除或引用字符。