Python MySQL游标无法获取行

时间:2017-04-26 19:37:43

标签: python mysql mysql-python

我正在尝试从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会引发“No result set to fetch from”。如果我使用缓冲游标运行,我可以看到游标的_rows属性包含我的数据,但fetchall()返回空数组。

3 个答案:

答案 0 :(得分:1)

您需要:

row = cursor.execute(stmt).fetchone()

或者:

rows = cursor.execute(stmt).fetchall()

答案 1 :(得分:0)

您的问题是cursor.execute(stmt)会返回一个包含结果的对象,而您不会存储该结果。

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

答案 2 :(得分:0)

对于未来具有相同问题的google,我找到了一种可能在某些情况下有用的解决方法:

我没有找到问题的根源,而是一个对我有用的解决方案。

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

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