使用python作为字典的postgresql查询

2024-04-26 14:11:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python2.7和postgresql 9.1。 试图从查询中获取字典,我尝试了下面描述的代码: http://wiki.postgresql.org/wiki/Using_psycopg2_with_PostgreSQL

import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=mydb host=localhost user=user password=password")
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute ("select * from port")
type(cur.fetchall())

它正在打印下一个答案:

<type 'list'>

打印项目本身,显示它是列表。 例外的答案是字典。

编辑:

尝试下一个:

ans = cur.fetchall()[0]
print ans
print type(ans)

回报

[288, 'T', 51, 1, 1, '192.168.39.188']
<type 'list'>

Tags: 答案importextras字典postgresqltypewikipassword
3条回答

也许我们可以进一步优化它

#!/var/bin/python 
import psycopg2
import psycopg2.extras

def get_dict_resultset(sql):
    conn = psycopg2.connect("dbname=pem host=localhost user=postgres password=Drupal#1008")
    cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cur.execute (sql)
    ans =cur.fetchall()
    dict_result = []
    for row in ans:
        dict_result.append(dict(row))
    return dict_result

sql = """select * from tablename"""
return get_dict_resultset(sql)

这很正常:当您调用.fetchall()时,方法返回元组列表。但如果你写信

type(cur.fetchone())

它将只返回一个类型为的元组:

<class 'psycopg2.extras.DictRow'>

在此之后,您可以将其用作列表或类似字典:

cur.execute('SELECT id, msg FROM table;')
rec = cur.fetchone()
print rec[0], rec['msg']

您还可以使用一个简单的游标迭代器:

res = [json.dumps(dict(record)) for record in cursor] # it calls .fetchone() in loop

Tnx很多Andrey Shokhin

完整的答案是:

#!/var/bin/python 
import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=uniart4_pr host=localhost user=user password=password")
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute ("select * from port")
ans =cur.fetchall()
ans1 = []
for row in ans:
    ans1.append(dict(row))

print ans1  #actually it's return

相关问题 更多 >