VSCode+Python+MySQL查询无数据时返回空表而非“No data”
解决SQLAlchemy查询空表时返回列名而非空列表的问题
问题场景
用VSCode搭配Python操作XAMPP托管的MySQL数据库,已安装VSCode的MySQL扩展可直接执行.sql文件查询,同时用SQLAlchemy执行查询并将结果导出到Excel。遇到的问题是:当查询无匹配行(比如查空表)时,VSCode的MySQL扩展返回No data,SQLAlchemy则返回空列表,无法得到带查询列名的空表结构。
问题重现
- 数据库:
company,包含一张空表vendors - 表结构:
vendors含vendor_id和vendor_name两列 - 查询语句:
USE company; SELECT * FROM vendors;
- VSCode执行结果:
No data - SQLAlchemy执行代码及输出:
query = "select * from vendors;" engine = get_engine(user=user, port=port, host=host, db=db, password=password) with engine.connect() as con: res = con.execute(text(f"{query}")).fetchall() print(res)
输出:[]
解决方案
受@GeorgRichter思路启发,通过检查游标返回的行数,在无数据时从游标元数据中提取列名,实现返回带列名的结构:
with engine.connect() as con: output = con.execute(text(sql_query)) if output.rowcount == 0: # 从游标描述元数据中提取列名 metadata = output.cursor.description column_names = [i[0] for i in metadata] return column_names # 可基于此列名构建空DataFrame用于Excel导出 else: rows = output.fetchall() # 处理有数据的业务逻辑
原理:即使查询结果为空,MySQL游标仍会返回包含列信息的元数据,通过output.cursor.description可以获取每个列的详细信息,其中第一个元素就是列名。拿到列名后,就可以生成带表头的空表结构,满足导出Excel的需求。
内容的提问来源于stack exchange,提问作者Stynx
相关产品推荐
相关产品推荐

