使用 psycopg2 占位符

问题描述 投票:0回答:1

我有以下代码:

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%'"

但这也不起作用。

如何解决此问题并获得预期的行为?

python sql postgresql psycopg2
1个回答
0
投票

您可以使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.