0

我一直在尝试使用 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',))

这些查询失败,但我得到的错误说错误是$1pg8000 将其转换%s为。

我究竟做错了什么?

4

2 回答 2

0

尝试显式命名您的参数并作为dict

param_dict = dict(table_name = 'schema.table_name')
query = """SELECT * FROM %(table_name)s"""
# cursor setup code...
cursor.execute(query, param_dict)
于 2018-09-26T19:32:41.150 回答
0

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

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

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

table_name = 'schema.table_name'
cursor.execute(f"SELECT * FROM {table_name}")
于 2021-04-04T11:06:18.077 回答