尽管查询返回行,Python,MySQLConnector,MySQLCursor.fetchall()引发“无结果集”错误

时间:2018-07-10 15:48:42

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

我有一个简单的Python 3脚本,使用MySQLConnector访问数据库。独立运行同一查询(通过PHPMyAdmin)返回我期望的结果;包含用户计数的单行。但是,当我执行脚本时,会抛出异常,因为不会返回任何结果。

我的脚本:

     connection = self.Connect()

     cursor = connection.cursor()

     query = 'SELECT COUNT(UserName) FROM ig_UserAccounts WHERE UserName=\'TestUser\''

     cursor.execute(query)

     results = cursor.fetchall()

异常消息:

     mysql.connector.errors.InterfaceError: No result set to fetch from.

Same query executed successfully in PHPMyAdmin

我像这样用self.Connect()方法验证数据库连接的完整性,并且还用INSERT语句对其进行了测试,以确认该连接有效:

     try:
         connection = mysql.connector.connect(user=self.username, password=self.password, host=self.hostname, database=self.databaseName)

      except mysql.connector.Error as e:
          if e.errno == errorcode.ER_ACCESS_DENIED_ERROR:
              print("Invalid database username or password")
              return None

          elif e.errno == errorcode.ER_BAD_DB_ERROR:
                 print("Invalid database name")
                 return None

          else:
              print(e)
              return None

      return connection

我也尝试使用fetchone()方法代替fetchall(),但是这只会返回None类型。

1 个答案:

答案 0 :(得分:0)

我现在已经解决了这个问题,这似乎是调试问题(在Visual Studio 2017中)。如果我在脚本的开头放置一个断点,然后逐行跳过execute()fetchall(),则结果集将在两行之间清空。

但是,如果仅在脚本末尾放置一个断点以暂停执行,结果集将按预期填充。