循环执行SQL查询批量生成对应名称DataFrame的问题求解
问题原因
你当前的写法是循环中直接对循环变量query赋值,每次迭代都会覆盖上一次的结果,所以最终仅保留最后一次查询的返回值。
推荐方案:使用字典存储查询结果
该方案不会污染全局命名空间,后续批量处理所有查询结果时更便捷,是工业界的通用做法。
queries = ['name1','name2','name3'] # 初始化空字典存储结果,key为查询名,value为对应的DataFrame df_dict = {} for query_name in queries: df_dict[query_name] = report(query_name)
后续需要取对应查询结果时,直接通过df_dict['name1']、df_dict['name2']即可获取对应DataFrame。
可选方案:生成独立变量(不推荐)
如果确实需要生成name1、name2这类独立的全局变量,可以通过操作全局命名空间实现,但是该方法容易出现命名冲突、调试难度高,非必要不建议使用。
queries = ['name1','name2','name3'] for query_name in queries: globals()[query_name] = report(query_name)
执行完成后就可以直接使用name1、name2、name3变量调用对应查询结果。
小优化点
你的report函数中开头初始化df = []是冗余的,后续会被pandas读取的DataFrame覆盖,可以删掉这行。
内容的提问来源于stack exchange,提问作者mhooper
相关产品推荐
相关产品推荐

