今天有朋友问到如何从 PostgreSQL 查出的结果集中直接用列名取数据,这里给大家简单分享一下。

通常 Python 使用 psycopg2 连接 PostgreSQL,然后取出结果集 Rows,遍历 Rows 并使用索引取出每一列;如果SQL 语句中增加了字段,那么通过索引的方式就需要修改很多问题,还需要关心顺序问题,所以就有了本文的需求。

下面直接上一段代码,大家可以直接测试使用:

# coding:utf-8
import psycopg2
import psycopg2.extras

conn = psycopg2.connect(database='postgres', user='chris', password='',  host='localhost', port=5432)
cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
sql = "select * from t1"
cursor.execute(sql)
rows = cursor.fetchall()

for row in rows:
    print(row['name'], ", ", row['id'])

'''
------------table structure----------------
create table t1(id int, name text);

insert into t1 select generate_series(1,100), generate_series(1,100)::text||'name';
'''

代码解释:

  • 代码上半部分为 Python 代码内容,下半部分为数据库中的测试表及数据
  • 代码中最为重要的是在 cursor 中指定了 psycopg2.extras.DictCursor,如果不指定这个参数,只能使用索引方式取结果集,指定了该参数,就可以使用索引或列名的方式去取数据了
  • 其他的内容都比较简单,请对应修改数据库连接参数信息

End~

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐