python - psycopg2.extras.DictCursor 没有给我列名
问题描述
我正在使用 psycopg2 访问 Postgres 数据库中的数据。我正在使用 psycopg2.extras.DictCursor 使用以下查询以类似 dict 的形式获取数据:
try:
self.con = psycopg2.connect(dbname=self.db, user=self.username,
host=self.host, port=self.port)
cur = self.con.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute("SELECT * FROM card")
result = cur.fetchall()
print result
我得到一个列表的输出:
[['C01', 'card#1', 'description#1', '1'], ['C02', 'card#2', 'description#2', '1']]
但是,我也想要列名。我在这里阅读了另一个类似的问题,但是在尝试以下操作时,我得到了KeyError:
cur.execute("SELECT * FROM card")
for row in cur:
print(row['column_name'])
但是,以下工作:
cur.execute("SELECT * FROM card")
for row in cur:
print(row['id'])
输出:
C01
C02
关于如何获取列名的任何想法?
解决方案
要获取所有列名,您可以将 mehtodkeys
用于行项,例如:
cur.execute("SELECT * FROM card")
result = cur.fetchall()
keys = list(result[0].keys()) if result else []
for row in result:
for key in keys:
print(row[key])
推荐阅读
- docker - 使用上次启动时已经包含文件的卷在 docker 上运行 confluence
- vue.js - Vuejs Vue Router 动态 url 无法正常工作
- r - 显示数据框的头部
- http - 对 Drupal 7 执行经过身份验证的原始 HTTP 请求需要什么?
- c# - 识别两棵树之间差异的算法
- mysql - 如何使用带有行号的mysql分区按类型返回项目
- mysql - Bash - 在 Ubuntu 18 中从 mysql-client 解析中拆分字符串的问题
- javascript - 如何在本地环境中测试共享社交媒体链接预览?
- gcc - 将 Codewarrior 的 Inline Assembler 翻译成 GCC Inline Assembler
- sql-server - 程序出错,sql 发送邮件不起作用