我有一个 postgresql 9.4(又名 mongodb 杀手 ;-))和这个简单的模式:
CREATE TABLE test (id SERIAL, name text, misc jsonb);
现在我填充这个,如果我选择它会显示类似
id | name | misc
1 | user1 | { "age" : 23, "size" : "M" }
2 | user2 | { "age" : 30, "size" : "XL" }
现在,如果我向 psycopg2 提出请求,
cur.execute("SELECT * FROM test;")
rows = list(cur)
我最终会得到
[ { 'id' : 1, 'name' : 'user1', 'misc' : '{ "age" : 23, "size" : "M" }' },
{ 'id2' : 2, 'name' : 'user2', 'misc' : '{ "age" : 30, "size" : "XL' }' }]
你会告诉我怎么了?好吧 misc 是 str 类型。我希望它被识别为 json 并转换为 Python dict。
来自 psycopg2 文档(psycopg2/extras 页面)它指出“从数据库中读取,json 值将自动转换为 Python 对象。”
使用 RealDictCursor 似乎并非如此。这意味着我无法访问 rows[0]['misc']['age'] 因为这很方便......
好的,我可以手动使用
for r in rows:
r['misc'] = json.loads(r['misc'])
但如果我可以避免这种情况,因为有更好的解决方案......
附言。拥有 1500+ 代表的人可以创建 postgresql9.4 标签;-)