我有以下代码:
query = "SELECT * FROM appointments WHERE service IN %s AND location LIKE '%London%'"
values = (services,) # services is a tuple of strings.
cur.execute(query, values)
当我执行此代码时,出现以下错误:
--> cur.execute(query, values)
IndexError: tuple index out of range
稍微研究一下该主题后,我认为查询中的
%L
被检测为占位符,因此psycopg2
库正在尝试在那里插入数据,但values
中没有更多数据元组。
我尝试使用以下查询转义
%
符号:
query = "SELECT * FROM appointments WHERE service IN %s AND location LIKE '%%London%'"
但这也不起作用。
如何解决此问题并获得预期的行为?
您可以使用
pscyopg2.sql
库安全地设置查询格式。
下面的代码将服务元组中每个元素的占位符值添加到查询字符串中,然后您可以像平常一样执行。
from psycopg2 import sql
query = sql.SQL("SELECT * FROM appointments WHERE service IN ({}) AND location LIKE '%%London%%'")
formatted_query = query.format(sql.SQL(',').join(sql.Placeholder() * len(services)))
cur.execute(formatted_query, services)