2015-12-02 127 views
1

目前,我正在做這個:填充了查詢結果的字典

cursor.execute('SELECT thing_id, thing_name FROM things') 
    things = []; 
    for row in cursor.fetchall(): 
     things.append(dict([('thing_id',row[0]), 
          ('thing_name',row[1]) 
          ])) 

有一些速記我可以用它來做到這一點,或者我應該寫一小助手功能?

回答

2

使用list comprehension

things = [{'thing_id': row[0], 'thing_name': row[1]} for row in cursor.fetchall()] 

或使用列表理解與zip

things = [dict(zip(['thing_id', 'thing_name'], row)) for row in cursor.fetchall()] 

如果使用Cursor.description attribute,你可以得到列名:

names = [d.name for d in c.description] 
things = [dict(zip(names, row)) for row in cursor.fetchall()] 
+0

完美,謝謝。我已經用你的第二個代碼塊,並在我的select語句中明確列出了列名。 –

+0

你怎麼能從列表中刪除字典? thx – Drewdin

+0

@Drewdin,你的意思是什麼'dict'? – falsetru

3

你可以使用MySQLdb.cursors.DictCursor而不是MySQLdb.cursors.Cursor通過將光標類傳遞給cursor方法:

In [9]: cur = conn.cursor(MySQLdb.cursors.DictCursor) 

In [10]: cur.execute('SELECT * FROM test_table') 
Out[10]: 3L 

In [11]: cur.fetchall() 
Out[11]: 
({'create_time': datetime.datetime(2015, 12, 2, 10, 22, 23), 
    'id': 1L, 
    'name': 'Bob'}, 
{'create_time': datetime.datetime(2015, 12, 2, 10, 22, 34), 
    'id': 2L, 
    'name': 'Stive'}, 
{'create_time': datetime.datetime(2015, 12, 2, 10, 22, 37), 
    'id': 3L, 
    'name': 'Alex'}) 
+0

有趣的方法 - ta! –