MySQL Connector执行带USE的多语句无返回,如何匹配GUI客户端行为?
解决MySQL Connector多语句执行无数据返回的问题
当使用multi=True执行多语句时,MySQL Connector的cursor.execute()不会直接返回结果,而是返回一个结果集迭代器。你需要主动遍历这个迭代器,才能获取每个语句的执行结果(尤其是SELECT类语句的数据)。GUI客户端会自动处理多语句的结果集并展示,但Connector需要手动处理。
正确的执行方式
# 执行多语句并获取迭代器 results = cursor.execute('USE my_db; SELECT * FROM my_table;', multi=True) # 遍历每个结果集 for result in results: # 判断当前结果集是否包含返回数据(比如SELECT语句) if result.with_rows: # 获取数据(可根据需求用fetchall/fetchone/fetchmany) data = result.fetchall() print(data)
关键说明
USE my_db;是DDL语句,执行后无返回结果,result.with_rows会为False,无需处理。- 仅包含返回数据的语句(如SELECT)会触发
result.with_rows=True,此时可调用fetch方法获取数据。 - 若存在多个SELECT语句,遍历过程会依次获取每个SELECT对应的结果集。
内容的提问来源于stack exchange,提问作者Arcus
相关产品推荐
相关产品推荐

