【问题标题】:Python mysql.connector rowcount > 0 but fetchall() shows no resultsPython mysql.connector rowcount > 0 但 fetchall() 没有显示结果
【发布时间】:2019-02-16 23:54:38
【问题描述】:

我正在使用 mysql.connector 并运行:

import mysql.connector
from mysql.connector import errorcode

def get_db_connection(user, password, database):
        try:
            return mysql.connector.connect(user=user, password=password,
                                           host='localhost',
                                           database=database)

        except mysql.connector.Error as err:
            if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
                print("Something is wrong with your user name or password")
            elif err.errno == errorcode.ER_BAD_DB_ERROR:
                print("Database does not exist")
            else:
                print(err)
        else:
            cnx.close()

    db = get_db_connection('user', 'password', 'database123')

    cursor = db.cursor()

    query = "SELECT * FROM companies;"

    cursor.execute(query)

    companies_results = cursor.fetchall()

我收到“mysql.connector.errors.InterfaceError: No result set to fetch”。错误但行数> 0(它是2)。我知道该表中只有 2 个结果。

系统详情: - 视窗 10 - Python 3.7.0 - 服务器类型:MariaDB - 服务器版本:10.3-MariaDB

【问题讨论】:

  • 如果不进行行计数而只调用 fetchall 会发生什么?
  • 不幸的是同样的事情
  • 对不起,我能想到的只有库中的一些兼容性问题。假设您全部通过 pip 安装?也许尝试使用 conda?

标签: python mysql python-3.x mysql-python mysql-connector


【解决方案1】:

最初我以为我已经通过将buffered 参数添加到光标来解决此问题。

cursor = db.cursor(buffered=True)

这不是真的。

我在调试时意识到我在 cursor.fetchall() 上有一个监视变量。这是在代码中调用它之前运行命令,这意味着当它到达代码时,我们没有结果可以获取。

解决方法:不要有 cursor.fetchall() 的监视变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2013-04-21
    • 1970-01-01
    • 2021-05-27
    • 2017-10-29
    相关资源
    最近更新 更多