在 psycopg2 中传递参数

jde*_*eng 2 python postgresql psycopg2

我正在尝试使用 psycopg2 访问 PostgreSQL:

sql = """
SELECT
    %s
FROM
    table;
"""

cur = con.cursor()
input = (['id', 'name'], )
cur.execute(sql, input)

data = pd.DataFrame.from_records(cur.fetchall())
Run Code Online (Sandbox Code Playgroud)

但是,返回的结果是:

             0
0   [id, name]
1   [id, name]
2   [id, name]
3   [id, name]
4   [id, name]
Run Code Online (Sandbox Code Playgroud)

如果我尝试访问单列,它看起来像:

     0
0   id
1   id
2   id
3   id
4   id
Run Code Online (Sandbox Code Playgroud)

列名周围的引用似乎有问题(不应出现单引号):

In [49]: print cur.mogrify(sql, input)

SELECT
    'id'
FROM
    table;
Run Code Online (Sandbox Code Playgroud)

但我正在关注文档:http : //initd.org/psycopg/docs/usage.html#

任何人都可以告诉我这里发生了什么?非常感谢!!!

小智 7

使用 AsIs 扩展

import psycopg2
from psycopg2.extensions import AsIs

column_list = ['id','name']
columns = ', '.join(column_list)

cursor.execute("SELECT %s FROM table", (AsIs(columns),))
Run Code Online (Sandbox Code Playgroud)

并且 mogrify 将显示它没有引用列名并按原样传递它们。