【问题标题】:Python MySQL cursor fails to fetch rowsPython MySQL游标无法获取行
【发布时间】:2017-04-26 19:37:43
【问题描述】:

我正在尝试从 AWS MariaDB 获取数据:

cursor = self._cnx.cursor()
stmt = ('SELECT * FROM flights')

cursor.execute(stmt)

print(cursor.rowcount)
# prints 2

for z in cursor:
    print(z)
# Does not iterate

row = cursor.fetchone()
# row is None

rows = cursor.fetchall()
# throws 'No result set to fetch from.'

我可以使用 MySQL Workbench 验证该表是否包含数据。我错过了一些步骤吗?

编辑:重新 2 个答案:

res = cursor.execute(stmt)
# res is None

编辑:

我用一个文件创建了新的 Python 项目:

import mysql.connector

try:
    cnx = mysql.connector.connect(
        host='foobar.rds.amazonaws.com',
        user='devuser',
        password='devpasswd',
        database='devdb'
    )

    cursor = cnx.cursor()
    #cursor = cnx.cursor(buffered=True)

    cursor.execute('SELECT * FROM flights')

    print(cursor.rowcount)
    rows = cursor.fetchall()

except Exception as exc:
    print(exc)

如果我使用简单游标运行此代码,fetchall 会引发“没有要从中获取的结果集”。如果我使用缓冲游标运行,我可以看到游标的 _rows 属性包含我的数据,但 fetchall() 返回空数组。

【问题讨论】:

    标签: python mysql mysql-python


    【解决方案1】:

    您的问题是 cursor.execute(stmt) 返回一个带有结果的对象,而您没有存储它。

    results = cursor.execute(stmt) print(results.fetchone()) # Prints out and pops first row

    【讨论】:

    • 执行返回无,所以这会抛出关于在无类型上调用方法的异常
    • 嗯...我想我找到了一些关于你的光标可能返回的细节。也许它没有正确设置? dev.mysql.com/doc/connector-python/en/…
    【解决方案2】:

    对于未来遇到相同问题的谷歌用户,我找到了一种解决方法,在某些情况下可能会有所帮助:

    我没有找到问题的根源,但找到了对我有用的解决方案。

    在我的情况下 .fetchone() 也没有返回任何我在本地(在我自己的计算机上)数据库上所做的事情。我在我们公司服务器上的数据库中尝试了完全相同的代码,并且它以某种方式工作。所以我将完整的服务器数据库复制到我的本地数据库(通过使用数据库转储)只是为了获取服务器设置,然后我还可以使用以前不起作用的代码从本地 SQL-Server 获取数据。

    我是一个 SQL 新手,但我的本地 SQL-Server 上的一些疯狂设置可能会阻止我获取数据。也许一些更有经验的 SQL 用户知道这个设置并且可以解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多