Hướng dẫn python mysql fetch as dictionary - python tìm nạp mysql dưới dạng từ điển

Tôi có một bảng MySQL mà tôi đang thực hiện các câu lệnh chọn trong Python.

Có bất cứ điều gì trong API Python MySQLDB sẽ, thông qua con trỏ, xuất ra một mảng từ điển có các phím là tên cột (và các giá trị là trong các hàng được trả về)?

Đã hỏi ngày 1 tháng 9 năm 2011 lúc 9:04Sep 1, 2011 at 9:04

Hướng dẫn python mysql fetch as dictionary - python tìm nạp mysql dưới dạng từ điển

4

Vui lòng sử dụng con trỏ từ điển:

cursor = conn.cursor (MySQLdb.cursors.DictCursor)

Đã trả lời ngày 1 tháng 9 năm 2011 lúc 9:08Sep 1, 2011 at 9:08

Varelavarelavarela

1.2501 huy hiệu vàng10 Huy hiệu bạc16 Huy hiệu đồng1 gold badge10 silver badges16 bronze badges

Đối với tôi, điều này đã hoạt động:

cursor = conn.cursor(dictionary=True)

Ví dụ chi tiết:

import mysql.connector # pip install mysql-connector-python

conn = mysql.connector.connect(host="localhost", user="user", passwd="pass", database="dbname")
cursor = conn.cursor(dictionary=True)
sql = "SELECT * FROM `table` WHERE 1"
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows:
    row["col"]

Hướng dẫn python mysql fetch as dictionary - python tìm nạp mysql dưới dạng từ điển

Đã trả lời ngày 12 tháng 7 năm 2019 lúc 9:59Jul 12, 2019 at 9:59

Hướng dẫn python mysql fetch as dictionary - python tìm nạp mysql dưới dạng từ điển

DawedaweDaWe

1.18814 Huy hiệu bạc20 Huy hiệu đồng14 silver badges20 bronze badges

1

Cơ sở dữ liệu nguồn mở phổ biến nhất thế giới

10.6.4 & nbsp; con trỏ.mysqlcursordict Class

Lớp

cursor = conn.cursor(dictionary=True)
0 kế thừa từ
cursor = conn.cursor(dictionary=True)
1. Lớp này có sẵn theo đầu nối/Python 2.0.0.

Một con trỏ

cursor = conn.cursor(dictionary=True)
0 trả về mỗi hàng dưới dạng từ điển. Các khóa cho mỗi đối tượng từ điển là tên cột của kết quả MySQL.

Thí dụ:

cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(dictionary=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")

print("Countries in Europe:")
for row in cursor:
    print("* {Name}".format(Name=row['Name']

Mã trước tạo ra đầu ra như thế này:

Countries in Europe:
* Albania
* Andorra
* Austria
* Belgium
* Bulgaria
...

Có thể thuận tiện khi chuyển từ điển đến

cursor = conn.cursor(dictionary=True)
3 như sau:

cursor.execute("SELECT Name, Population FROM country WHERE Continent = 'Europe'")

print("Countries in Europe with population:")
for row in cursor:
    print("* {Name}: {Population}".format(**row))


Bài đăng này mô tả cách tạo một con trỏ tùy chỉnh trả về các hàng làm từ điển bằng cách sử dụng MySQL Connctor/Python v0.2 (hoặc sau này).

Vấn đề

Bạn muốn tìm nạp các hàng từ cơ sở dữ liệu và trả về chúng như một từ điển với các phím là tên cột.

Dung dịch

Đầu tiên, hãy kiểm tra cách bạn sẽ làm điều đó mà không cần bất kỳ con trỏ tùy chỉnh nào.without any custom cursor.

cnx = mysql.connector.connect(host='localhost',database='test')
cur = cnx.cursor()
cur.execute("SELECT c1, c2 FROM t1")
result = []
columns = tuple( [d[0].decode('utf8') for d in cur.description] )
for row in cur:
  result.append(dict(zip(columns, row)))
pprint(result)
cur.close()
cnx.close()

Các kết quả trên trong một đầu ra như thế này:

[{u'c1': datetime.datetime(2010, 10, 13, 8, 55, 35), u'c2': u'ham'},
 {u'c1': datetime.datetime(2010, 10, 13, 8, 55, 38), u'c2': u'spam'}]

Ngoài ra, bạn có thể mã hóa con trỏ của riêng bạn sẽ trả lại một hàng dưới dạng từ điển. Đây là một ví dụ về cách làm điều này:code your own cursor which will return a row as a dictionary. Here is an example on how to do this:

import mysql.connector

class MySQLCursorDict(mysql.connector.cursor.MySQLCursor):

  def fetchone(self):
    row = self._fetch_row()
    if row:
      return dict(zip(self.column_names, self._row_to_python(row)))
    return None

Những gì chúng tôi đã làm là phân lớp

cursor = conn.cursor(dictionary=True)
1 và quá tải phương pháp ____ 15. Để sử dụng những điều trên, bạn có thể làm sau:

cnx = mysql.connector.connect(host='localhost',database='test')
cur = cnx.cursor(cursor_class=MySQLCursorDict)
cur.execute("SELECT c1, c2 FROM t1")
rows = cur.fetchall()
pprint(rows)
cur.close()
cnx.close()

Bí quyết là vượt qua ____ ____ 16-đối thủ khi tạo con trỏ. (Tại thời điểm viết, tôi nhận ra rằng

cursor = conn.cursor(dictionary=True)
6 nên là một phần của các đối số kết nối để đặt mặc định cho tất cả các con trỏ được yêu cầu. Chúng tôi sẽ thay đổi điều đó.)trick is to pass the
cursor = conn.cursor(dictionary=True)
6-argument when creating the cursor
. (At the time of writing, I realize that the
cursor = conn.cursor(dictionary=True)
6 should be part of the connection arguments to set a default for all requested cursors. We’ll change that.)

Nó có một mã hóa thanh lịch hơn một chút và khả năng là vô tận.Có lẽ bạn thích một con trỏ trả lại một hàng trong XML chẳng hạn.a bit more elegant coding and possibilities are endless. Maybe you’d like a cursor which returns a row in XML for example.