pg8000 无法参数化查询



我一直在尝试使用 pg8000 与我的 SQL 服务器交互,但由于某种原因,它无法正确接受参数。它似乎确实识别了参数样式,然后知道将它们更改为PostgreSQL参数,但它似乎从未传递过参数。我查看了此处的文档示例(链接(以获取示例,但它们不起作用。以下是一些示例:

query = """
SELECT *
FROM schema.table_name
"""
conn = pg8000.connect(**credential_dict)
cursor = conn.cursor()
cursor.execute(query)

此示例有效。接下来的两个不会:

query = """
SELECT *
FROM %s
"""
conn = pg8000.connect(**credential_dict)
cursor = conn.cursor()
cursor.execute(query, 'schema.table_name')
query = """
SELECT *
FROM %s
"""
conn = pg8000.connect(**credential_dict)
cursor = conn.cursor()
cursor.execute(query, ('schema.table_name',))

这些查询失败,但我收到的错误说错误位于 pg8000 将%s转换为的$1

我做错了什么?

使用 PostgreSQL,SQL 语句的某些部分无法参数化。在您的示例中:

cursor.execute("SELECT * FROM %s", 'schema.table_name')

表名无法参数化,因此您必须自己创建字符串:

table_name = 'schema.table_name'
cursor.execute(f"SELECT * FROM {table_name}")

尝试显式命名参数并作为dict传递:

param_dict = dict(table_name = 'schema.table_name')
query = """SELECT * FROM %(table_name)s"""
# cursor setup code...
cursor.execute(query, param_dict)

相关内容

  • 没有找到相关文章

最新更新