我以前从未使用过psycopg2,但我正在尝试将游标工厂更改为DictCursor,以便fetchall或fetchone将返回字典而不是列表。
我创建了一个测试脚本,使事情变得简单,只测试这个功能。这是我觉得应该有用的一点代码
import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=%s user=%s password=%s" % (DATABASE, USERNAME, PASSWORD))
cur = conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
cur.execute("SELECT * from review")
res = cur.fetchall()
print type(res)
print res
res变量始终是一个列表,而不是我所期望的字典。
我目前实现的一个解决方法是使用这个函数来构建字典,并通过它运行fetchall返回的每一行。
def build_dict(cursor, row):
x = {}
for key,col in enumerate(cursor.description):
x[col[0]] = row[key]
return d
Python是2.6.7版,psycopg2是2.4.2版。
另一种解决方案是使用Named Tuple Cursor,因为真正的Dict游标将中断任何使用整数指示符的查询,如文档中所述。
使用命名元组游标,可以使用点语法访问它们,如下所示:
据我所知,这样可以保持东西整洁,不会弄坏任何东西。
使
res
成为psycopg2.extras.DictRow
s的列表或者,您可以利用
cur
是一个iterable的事实,而不是调用cur.fetchall
:因此,您将能够使用类似于
dict
的语法访问数据。使用RealDictCursor:
这将提供一个包含行的列表作为真正的python字典,而不是“高级psycopg2列表”。
相关问题 更多 >
编程相关推荐