Почему MariaDB ничего не возвращает через Python запросу, который отлично работает во всех остальных отношениях? - PullRequest
0 голосов
/ 17 июня 2020

У меня работает сервер MariaDB. Он работает должным образом при локальном входе в систему с помощью собственного клиентского программного обеспечения или при подключении с удаленного компьютера, например, через Navicat. При таком подключении он реагирует на все команды SELECT и INSERT, как ожидалось.

Однако я не могу заставить его отвечать на Python, и он даже не возвращает ошибку.

Вот тестовый код:

#!/usr/bin/python

import mysql.connector as mariadb
# import mariadb

class dbQuery:

    def __init__(self):
        try:
            self.mariadb_connection = mariadb.connect(host='127.0.0.1', port=8457, user='root', password='XXXXX', database='empowerment')
            self.cursor = self.mariadb_connection.cursor()
        except:
            print("Error")

    def query(self):
        query = "SELECT 1+1;"
        try:
            ans = self.cursor.execute(query)
        except:
            print("Error")
        print("ans1: ",ans)
        return ans

    def __del__(self):
        self.mariadb_connection.close()

thisQuery = dbQuery()
ans = thisQuery.query()
print("ans2: ",ans)

ans1 и ans2 печатают None как с mysql .connector, так и с (beta) mariadb коннектором. Ни одно из исключений никогда не выбрасывается. Если я print переменные соединения или курсора, кажется, что они имеют допустимое содержимое в соответствующих точках кода. Только вывод execute кажется неправильным. Это на Raspberry Pi OS, если это важно.

Что мне может не хватать?

1 Ответ

1 голос
/ 17 июня 2020

mysql.connector основан на Python Спецификации API базы данных v2.0 ( ссылка )
И execute метод возвращает None
To Чтобы получить результат запроса, вам нужно использовать такой метод, как fetchall или
, вам необходимо выполнить итерацию через сам объект cursor.
Итак, ваш метод query должен быть примерно таким:

    def query(self):
        query = "SELECT 1+1;"
        try:
            self.cursor.execute(query)
            ans = self.cursor.fetchall()
        except:
            print("Error")
        print("ans1: ",ans)
        return ans
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...