#python #mysql #mysql-connector
#python #mysql #mysql-connector
Вопрос:
Я попытался создать короткую функцию-оператор, которая вернет мне результат запроса. Это отлично работает с pyodbc, но не с mysql connector.
Вывод был :
Файл «/mySQLDB.py «, строка 17, в execute_and_fetch result = conn.cursor().execute(запрос, параметры).fetchall () Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘fetchall’
import mysql.connector
class MYSQLDB:
def __init__(self):
self.host = 'xx'
self.database = 'xx$xx'
self.user = 'xx'
self.password = 'xx'
def execute(self, query, *params):
mysql.connector.connect(host=self.host, database=self.database,
user=self.user, password=self.password).cursor().execute(query, params).commit()
def execute_and_fetch(self, query, *params):
conn = mysql.connector.connect(host=self.host, database=self.database,
user=self.user, password=self.password)
result = conn.cursor().execute(query, params).fetchall()
conn.commit()
return result
Комментарии:
1. Не означает ли ошибка, что «conn.cursor().execute (query, params)» вернул значение None?
2. @BobbyOcean, если я вас хорошо понимаю. Вы пытаетесь сказать, что это не пустой набор записей?
3. Все, что я знаю, это то, что ваш код использует только «fetchall ()» на месте, которое находится в коде «conn.cursor ().execute (query, params)». Следовательно, запуск этого .execute() должен возвращать значение None .
Ответ №1:
PEP 249, спецификация DBAPI, говорит, что возвращаемое значение execute
не определено. Возвращается довольно много реализаций DBAPI None
, что означает, что вы не можете (переносимо) связать execute().fetchall()
, как вы пытаетесь сделать.
Ответ №2:
Попробуйте этот код. Если у вас все еще возникают проблемы, проверьте, что соединение с базой данных выполнено успешно.
import mysql.connector
class MYSQLDB:
def __init__(self):
self.host = 'xx'
self.database = 'xx$xx'
self.user = 'xx'
self.password = 'xx'
def execute(self, query, *params):
mysql.connector.connect(host=self.host, database=self.database,
user=self.user, password=self.password).cursor().execute(query, params).commit()
def execute_and_fetch(self, query, *params):
conn = mysql.connector.connect(host=self.host, database=self.database,
user=self.user, password=self.password)
with conn.cursor() as cursor:
cursor.execute(query, params=None)
... result = cursor.fetchall()
conn.commit()
return result
Комментарии:
1.
line 18, in execute_and_fetch with conn.cursor() as cursor: AttributeError: __enter__