我正在尝试使用psycopg 2访问PostgreSQL:
sql = """
SELECT
%s
FROM
table;
"""
cur = con.cursor()
input = (['id', 'name'], )
cur.execute(sql, input)
data = pd.DataFrame.from_records(cur.fetchall())
字符串
但是,返回的结果是:
0
0 [id, name]
1 [id, name]
2 [id, name]
3 [id, name]
4 [id, name]
型
如果我尝试访问单个列,它看起来像:
0
0 id
1 id
2 id
3 id
4 id
型
看起来列名周围的引号有问题(不应该有单引号):
In [49]: print cur.mogrify(sql, input)
SELECT
'id'
FROM
table;
型
但我在跟踪dochttp://initd.org/psycopg/docs/usage.html#
有人能告诉我这是怎么回事吗?多谢了!!!
3条答案
按热度按时间ddhy6vgd1#
使用AsIs扩展
字符串
mogrify将显示它没有引用列名并按原样传递它们。
ddhy6vgd2#
现在,您可以使用sql.Identifier以一种干净安全的方式来完成此操作:
字符串
有关查询组合的更多信息,请参见:https://www.psycopg.org/docs/sql.html
zdwk9cvp3#
原因是您将数组的字符串表示['id','name']作为SQL查询参数传递,而不是作为列名传递。所以结果查询类似于
字符串
看起来你的表有5行,所以返回的结果只是每行的文字。
列名不能是SQL查询参数,但可以是在执行查询之前准备的普通字符串参数-
型
在本例中,结果查询为
型