如何在Python脚本中迭代Postgresql行?

时间:2016-04-14 07:37:12

标签: python postgresql pygresql

我正在编写一个脚本,它从数据库表中选择并遍历行。

在MySQL中我会这样做:

import MySQLdb
db_mysql=MySQLdb.Connect(user=...,passwd=...,db=..., host=...)
cur = db_mysql.cursor(MySQLdb.cursors.DictCursor)
cur.execute ("""SELECT X,Y,Z FROM tab_a""")
for row in crs.fetchall () :
     do things...

但我不知道如何在PostgreSQL中做到这一点。 基本上这个问题可能是如何翻译上面的MySQL代码以使用PostgreSQL。

这是我到目前为止(我正在使用PyGreSQL)。

import pg
pos = pg.connect(dbname=...,user=...,passwd=...,host=..., port=...)
pos.query("""SELECT X,Y,Z FROM tab_a""")

如何迭代查询结果?

2 个答案:

答案 0 :(得分:1)

取自您应阅读的http://www.pygresql.org/contents/tutorial.html

q = db.query('select * from fruits')
q.getresult()

结果是一个元组的Python列表,eardh元组包含一行,你只需要遍历列表并迭代或索引tupple。

答案 1 :(得分:0)

我认为它是一样的,你必须创建游标,调用一些fetch和迭代就像在MySQL中一样:

import pgdb
pos = pgdb.connect(database=...,user=...,password=...,host=..., port=...)
sel = "select version() as x, current_timestamp as y, current_user as z"
cursor = db_conn().cursor()
cursor.execute(sel)
columns_descr = cursor.description
rows = cursor.fetchall()
for row in rows:
    x, y, z = row
    print('variables:')
    print('%s\t%s\t%s' % (x, y, z))
    print('\nrow:')
    print(row)
    print('\ncolumns:')
    for i in range(len(columns_descr)):
        print('-- %s (%s) --' % (columns_descr[i][0], columns_descr[i][1]))
        print('%s' % (row[i]))
    # this will work with PyGreSQL >= 5.0
    print('\n testing named tuples')
    print('%s\t%s\t%s' % (row.x, row.y, row.z))