首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pg8000无法参数化查询

pg8000无法参数化查询
EN

Stack Overflow用户
提问于 2018-09-27 03:19:44
回答 2查看 1.1K关注 0票数 0

我一直在尝试使用pg8000与我的SQL server进行交互,但是由于某些原因,它不能正确地接受参数。它似乎确实识别了参数样式,然后知道将它们更改为PostgreSQL参数,但它似乎从未传递过参数。我在这里的文档示例中查看了(link)的示例,它们不起作用。下面是一些示例:

代码语言:javascript
复制
query = """
        SELECT *
        FROM schema.table_name
        """
conn = pg8000.connect(**credential_dict)
cursor = conn.cursor()
cursor.execute(query)

这个例子是可行的。接下来的两个不是:

代码语言:javascript
复制
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上。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-09-27 03:32:41

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

代码语言:javascript
复制
param_dict = dict(table_name = 'schema.table_name')
query = """SELECT * FROM %(table_name)s"""
# cursor setup code...
cursor.execute(query, param_dict)
票数 0
EN

Stack Overflow用户

发布于 2021-04-04 19:06:18

使用PostgreSQL,SQL语句的某些部分can't be parameterized。在您的示例中:

代码语言:javascript
复制
cursor.execute("SELECT * FROM %s", 'schema.table_name')

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

代码语言:javascript
复制
table_name = 'schema.table_name'
cursor.execute(f"SELECT * FROM {table_name}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52524736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档