【发布时间】:2019-08-30 13:10:42
【问题描述】:
我正在尝试使用连接列表作为参数执行 sql 查询。
我已经建立了一个数据库连接,我想要一个类似的查询:
SELECT * FROM MYDATABASE.MY_TABLE
WHERE ( name IN ('name1','name2') );
所以我想将列表作为参数传递,变量过滤器是存储了正确格式但未实际使用的变量。
应该这样做的代码是:
my_list = ['name1', 'name2']
filters = ",".join(("'{}'".format(key) for key in my_list))
q = sql.SQL('''SELECT * FROM MYDATABASE.MY_TABLE WHERE ( name IN ({}) );''')
.format(sql.SQL(', ')
.join(sql.Placeholder() * len(my_list)))
cur = self.con.cursor()
query = q.as_string(context=self.con)
cur.execute(q)
results = cur.fetchall()
cur.close()
字符串查询是:
'SELECT * FROM MYDATABASE.MY_TABLE WHERE (name IN (%s, %s));'
,这似乎是正确的。
但是转义字符有一个错误,我找不到解决方法。
最后,我必须使用占位符而不是简单的
".... 其中名称 = {}".format()
解决方案,主要是出于安全原因。
有什么帮助吗?
编辑:
我尝试了所有建议,它们都给了我语法错误:
'错误:在“,”处或附近出现语法错误
第 1 行: ....MY_TABLE WHERE (name IN (?,?)) ...
..................................................... .................... ^'
【问题讨论】:
标签: python amazon-redshift psycopg2