为了账号安全,请及时绑定邮箱和手机立即绑定

Python Psycopg2 Postgres选择包含字段名称的列

Python Psycopg2 Postgres选择包含字段名称的列

慕仙森 2021-03-29 09:11:19
我想从数据库中获得一张表,但要包含字段名称,以便我可以在例如Pandas的列标题中使用它们,而我不必事先知道所有字段名称所以如果我的数据库看起来像table test1 a | b | c ---+---+--- 1 | 2 | 3 1 | 2 | 3 1 | 2 | 3 1 | 2 | 3 1 | 2 | 3我该怎么办import psycopg2 as pqcn = pq.connect('dbname=mydb user=me')cr = cn.cursor()cr.execute('SELECT * FROM test1;')tmp = cr.fetchall()tmp这样的tmp显示[('a','b','c'),(1,2,3),(1,2,3),(1,2,3),(1,2,3),(1,2,3)]谢谢
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

列名可作为cr.description[0][0]cr.description[1][0]等等。如果你想它正是你展示的格式,你需要做一些工作来提取它,并把它贴在结果集的前面。


查看完整回答
反对 回复 2021-04-02
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

如果您想要的是一个数据框,该数据框具有db表中的数据作为其值,并且数据框列名是您从db中读取的字段名,那么这应该可以满足您的要求:


import psycopg2 as pq

cn = pq.connect('dbname=mydb user=me')

cr = cn.cursor()

cr.execute('SELECT * FROM test1;')

tmp = cr.fetchall()


# Extract the column names

col_names = []

for elt in cr.description:

    col_names.append(elt[0])


# Create the dataframe, passing in the list of col_names extracted from the description

df = pd.DataFrame(tmp, columns=col_names)


查看完整回答
反对 回复 2021-04-02
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您也可以在它上面映射,看起来更好一些:


cursor.execute(open("blah.sql", "r").read())

data = cursor.fetchall()

cols = list(map(lambda x: x[0], cursor.description))

df = DataFrame(data, columns=cols)


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 485 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号