我的意思是这样的:传递许多参数的Django光标的一个占位符(placeholer在IN)
from django.db import connection
cursor=connection.cursor()
cursor.execute('SELECT * FROM mytable where id IN (%s)', [params])
参数不能只是迭代 - 这是行不通的。 由于数据库处理程序存在转义值,因此无法使用CSV格式。
如何在IN
内使用占位符?
通过CSV是错的,我的意思是,对于params=['1','2','3','4','5']
c.execute('select * from mytable where id in (%s)', [','.join(params)])
会产生:
select * from mytable where id in ('1,2,3,4,5')
但正确的SQL是:
select * from mytable where id in (1,2,3,4,5)
,它似乎很难实现占位符。
不确定你的意思是'它不能以CSV格式'。 IN期望一个值列表,必须用逗号分隔。如果你的'params'是一个列表,你应该做一些像'','join(params)'。这会将一个像[1,2,3]这样的列表转换成一个像1,2,3的字符串。 –
在SQl中谨慎使用'%s'作为占位符,它可能让您容易受到SQL注入攻击https://xkcd.com/327/ –
@Chris_Rands:它不是关于虚拟''%s“%params'。 –