【发布时间】:2019-03-02 15:29:21
【问题描述】:
我一直在尝试使用 pg8000 与我的 SQL 服务器进行交互,但由于某种原因,它无法正确接受参数。它似乎确实可以识别参数样式,然后知道将其更改为 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',))
这些查询失败,但我得到的错误是错误位于$1,pg8000 将%s 转换为。
我做错了什么?
【问题讨论】:
-
我的猜测是,应该传递用于限制右侧的查询参数,例如
IN (%s, %s)、= %s等,而不是表或列名称等架构项 -
试过了,得到了一个不同的错误。查询是
SELECT * FROM schema.table_name WHERE column IN (%s);并得到错误ProgrammingError: (u'ERROR', u'ERROR', u'25P02', u'current transaction is aborted, commands ignored until end of transaction block', u'postgres.c', u'1309', u'exec_parse_message') -
试试
SELECT * FROM schema.table_name WHERE column = '%s'; -
同样的错误,但也没有帮助。
标签: python postgresql pg8000