MySQL: pymysql или mysqldb для доступа к функциональности курсора словаря - PullRequest
0 голосов
/ 08 мая 2019

Я хотел бы получить объект словаря в результате выполнения команды SQL «execute (« insert ... »)» в Python 2.7 с использованием Debain Stretch на Raspberry Pi V3. Обычный объект - это кортеж, поэтому доступ к элементам осуществляется через целочисленный индекс. Из Интернета может появиться, что две библиотеки будут предоставлять эту диссонарную функциональность: mysqldb и pymysql. Когда я использую «import mysqldb», я получаю сообщение об ошибке «ImportError: нет модуля с именем mysqldb». Если я использую «import pymysql», я не получаю никаких ошибок, но в результате получается кортеж, а не словарь, что я и получаю, я просто беру курсор по умолчанию. Если я изменю свой код, указав имя столбца, например

print ("строка", mycursor.rowcount, "id", x ['id'], "date", x ['date_time'])

Тогда я получаю ошибку об использовании нецелого индекса. Вот пример кода:

#!/usr/bin/env python
import sys
import pymysql
import mysql.connector
db = mysql.connector.connect(
  host="localhost",
  user="xxx",
  passwd="yyy",
  database="zzz")
print(db)
mycursor = db.cursor(pymysql.cursors.DictCursor)
#    mycursor = db.cursor()
mycursor.execute("select * from table;")
myresult = mycursor.fetchall()
for x in myresult:
    print("row ", mycursor.rowcount, "id ", x[0], " date ", x[1])
# if I use "print("row ", mycursor.rowcount, "id ", x["id"], " date ", x[date_Time])" it throws an error

Это новая установка Stretch на Raspberry Pi v3. Я установил следующее:

  • sudo apt-get install mariadb-server
  • sudo apt-get install python-mysqldb
  • sudo apt-get -y установить python-mysql.connector
  • sudo apt-get install libmariadbclient-dev
  • Установка sudo pip PyMySQL

У меня есть поиск ответов в Интернете, включая две ссылки ниже

Но пока не нашли решения. Кто-нибудь может помочь? .... RDK

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Хоуи Пенг ответил на часть моего вопроса, касающуюся использования pymysql для получения доступа к DictCursor. Спасибо.

Теперь я выяснил проблемы с использованием mysqldb !! Первый ответ заключается в том, что это не mysqldb , а скорее MySQLdb , обратите внимание на верхний и нижний регистр !! Это изменение позволило моей программе на Python пройти оператор import, но все равно не удалось выполнить оператор db = MySQLdb.connect(.... Кажется, что в отличие от mysql.connector и pymysql, MySQLdb использует db вместо database для указания имени базы данных.

Тебе это не нравится? .... RDK

0 голосов
/ 08 мая 2019

Попробуйте использовать pymysql.connect вместо mysql.connector.connect

# !/usr/bin/env python
import sys
import pymysql

db = pymysql.connect(
    host="localhost",
    user="xxx",
    passwd="yyy",
    database="zzz")
print(db)
mycursor = db.cursor(pymysql.cursors.DictCursor)
mycursor.execute("select * from table;")
myresult = mycursor.fetchall()
for x in myresult:
    print("row ", mycursor.rowcount, "id ", x["id"], " date ", x["date_Time"])
...