2010-02-01 25 views
26

Bất cứ ai biết cách tôi có thể sử dụng mysqldb để chuyển một bảng MySQL, với nhiều hàng, thành một danh sách các đối tượng từ điển bằng Python?Python: sử dụng mysqldb để nhập một bảng MySQL làm từ điển?

tôi có nghĩa là chuyển một tập hợp các hàng MySQL, với các cột 'a', 'b', và 'c', vào một đối tượng Python mà trông như thế này:

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 }, { 'a':'Q', 'b':(1, 4), 'c':5.0 }, { 'a':'T', 'b':(2, 8), 'c':6.1 } ] 

Cảm ơn :)

+0

tôi sẽ thêm thẻ 'dictionary' và/hoặc' con trỏ' vào đây, nếu có thể. – cregox

Trả lời

56

MySQLdb có một lớp con trỏ riêng biệt cho điều này, DictCursor. Bạn có thể vượt qua các lớp con trỏ bạn muốn sử dụng để MySQLdb.connect():

import MySQLdb.cursors 
MySQLdb.connect(host='...', cursorclass=MySQLdb.cursors.DictCursor) 
+2

Tuyệt vời, cảm ơn bạn! Đối với bất kỳ ai đọc, bạn cũng cần phải thêm "nhập MySQLdb.cursors" vào đầu tập lệnh Python của bạn để bao gồm nó. – AP257

+2

Bạn phải bỏ lỡ thực tế là tôi đã bao gồm việc nhập MySQL.cursors ngay tại đó trong đoạn mã. –

+15

Đối với bất kỳ ai đọc, bạn cũng cần thêm 'MySQLdb.connect (host = '...', cursorclass = MySQLdb.cursors.DictCursor)' ở đâu đó sau khi 'nhập MySQLdb.cursors' cho đoạn mã hoạt động. (xin lỗi, tôi không thể cưỡng lại!: D) – cregox

16

Nếu bạn cần phải sử dụng nhiều con trỏ và chỉ có một cần phải được MySQLdb.cursors.DictCursor bạn có thể làm:

import MySQLdb 
db = MySQLdb.connect(host='...', db='...', user='...t', passwd='...') 

list_cursor = db.cursor() 
dict_cursor = db.cursor(MySQLdb.cursors.DictCursor) 
+0

Cần phải thêm 'nhập MySQLdb.cursors' nếu không nó sẽ gây ra lỗi trong python 3.4 –

0

Đây là một bài đăng cổ, và trong khi câu trả lời này không chính xác là những gì OP đang tìm kiếm, nó cũng nằm dọc theo cùng một dòng. Thay vì tạo ra một danh sách các từ điển, nó tạo ra một từ điển danh sách:

Cũng nghĩ rằng tôi muốn cung cấp mã đầy đủ cho việc tạo từ điển:

import MySQLdb 
import MySQLdb.cursors 

dict_serv = MySQLdb.connect(host = 'localhost', user = 'root', passwd = 'mypassword', cursorclass = MySQLdb.cursors.DictCursor) 

with dict_serv as c: 
    c.execute("USE mydb") 
    c.execute("SELECT col1, col2 FROM mytable WHERE id = 'X123'") 

    # Save the dictionary to a separate variable 
    init_dict = c.fetchall() 

    # This line builds the column headers 
    sql_cols = [ col[0] for col in c.description ] 

    # This is a list comprehension within a dictionary comprehension 
    # which builds the full dictionary in a single line. 
    sql_dict = { k : [ d[k] for d in init_dict ] for k in sql_cols } 

nào mang lại:

{ 'col1': ['apple','banana'], 'col2':['red','yellow'] } 
Các vấn đề liên quan