提问者:小点点

为什么MariaDB不通过Python返回任何其他方式都可以正常工作的查询?


我有一个正常工作的MariaDB服务器。 当使用自己的客户端软件本地登录时,或通过例如Navicat从远程计算机连接时,它可以正常工作。 当以这些方式连接时,它按预期响应所有selectinsert命令。

但是,我不能让它响应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都使用mysql.connector和(测试版)mariadb连接器打印none。 不会引发任何异常。 如果我print连接或游标变量,它们似乎在代码中的适当位置具有有效内容。 只有execute的输出似乎是错误的。 这是在树莓派OS上,如果那很重要的话。

我可能会错过什么?


共1个答案

匿名用户

mysql.connector基于Python Database API Specification v2.0(link)
execute方法返回none
若要获得查询结果,您需要使用类似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