【问题标题】:Why would MariaDB return nothing through Python to a query that works fine every other way?为什么 MariaDB 不会通过 Python 返回任何其他方式都可以正常工作的查询?
【发布时间】:2020-06-17 12:33:23
【问题描述】:

我有一个正常运行的 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 和(beta)mariadb 连接器打印None。没有任何异常被抛出。如果我print 连接或游标变量,它们似乎在代码中的适当位置具有有效内容。只有execute 的输出似乎是错误的。如果重要的话,这是在 Raspberry Pi OS 上。

我可能缺少什么?

【问题讨论】:

    标签: python mysql raspberry-pi mariadb


    【解决方案1】:

    mysql.connector 基于 Python 数据库 API 规范 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
    

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 1970-01-01
      • 2023-02-26
      • 2013-03-04
      • 1970-01-01
      • 2021-02-27
      • 2021-11-14
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多