我一直在尝试使用pg8000与我的SQL server进行交互,但是由于某些原因,它不能正确地接受参数。它似乎确实识别了参数样式,然后知道将它们更改为PostgreSQL参数,但它似乎从未传递过参数。我在这里的文档示例中查看了(link)的示例,它们不起作用。下面是一些示例:
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上。
我做错了什么?
发布于 2018-09-27 03:32:41
尝试显式命名参数并将其作为dict传递
param_dict = dict(table_name = 'schema.table_name')
query = """SELECT * FROM %(table_name)s"""
# cursor setup code...
cursor.execute(query, param_dict)发布于 2021-04-04 19:06:18
使用PostgreSQL,SQL语句的某些部分can't be parameterized。在您的示例中:
cursor.execute("SELECT * FROM %s", 'schema.table_name')表名不能参数化,因此您必须自己创建字符串:
table_name = 'schema.table_name'
cursor.execute(f"SELECT * FROM {table_name}")https://stackoverflow.com/questions/52524736
复制相似问题