Python使用mysql.connector查询MySQL时fetchall返回空列表如何解决
问题排查与解决方案
连接参数取值错误
你当前代码里的连接参数值全部用双引号包裹,比如host="config.host"实际传递的是字符串常量config.host,而非配置对象对应属性的值;同时密码参数你误写为config.db_user,和用户名参数取值一致,属于明显手误,哪怕连接建立成功,也大概率连接的是错误的数据库实例。正确的参数写法如下:connection = connect( host=config.host, database=config.db_name, user=config.db_user, password=config.db_password )事务隔离导致数据不可见
mysql-connector-python默认关闭自动提交,默认事务隔离级别为可重复读,如果你查询的数据是其他会话近期提交写入的,当前会话无法读取到最新的已提交数据。可以在创建连接时开启自动提交解决:connection = connect( host=config.host, database=config.db_name, user=config.db_user, password=config.db_password, autocommit=True )也可以在执行查询前手动提交一次事务:
connection.commit()跨库查询权限问题
你的查询语句显式指定了occUserManager库下的表,而连接时指定的默认库为config.db_name,如果二者不一致,且当前数据库账号没有occUserManager库的查询权限,不会抛出权限报错但会返回空结果。你可以先执行以下语句校验权限:cursor.execute("SELECT DATABASE();") print(cursor.fetchone()) # 打印当前会话默认库 cursor.execute("SHOW GRANTS;") print(cursor.fetchall()) # 打印当前账号权限游标缓冲问题
可以在创建游标时开启缓冲,避免结果集未正常加载导致返回空:cursor = connection.cursor(buffered=True)
内容的提问来源于stack exchange,提问作者Tacio Degrazia
相关产品推荐
相关产品推荐

