如何在Python中为BigQuery查询结果实现动态变量命名?
解决Python动态命名变量存储BigQuery查询结果的问题
Python不允许直接给f-string表达式赋值,这就是你遇到SyntaxError: cannot assign to f-string expression错误的原因。要分别存储每个查询结果,推荐使用字典来管理,这是最安全、易维护的方式,比动态创建变量更靠谱。
方法一:用字典存储结果
修改你的代码,创建一个字典,将每个查询结果以键值对的形式存入:
import pandas_gbq import pandas as pd # 不要用内置类型名"list"做变量名,换成query_list query_list = ["1", "2"] # 初始化空字典,用于存储所有查询结果 results_dict = {} for i in query_list: # 修正SQL语句中的多余逗号(FROM TABLEA后的逗号需删除) query = f'''SELECT * FROM TABLEA WHERE CONDITION LIKE '%{i}%' GROUP BY 1''' # 用带编号的字符串作为键,比如"results1"、"results2" results_dict[f'results{i}'] = pandas_gbq.read_gbq(query, project_id='privacyreasons')
访问结果
要获取对应编号的查询结果,直接通过字典的键访问:
# 获取i="1"对应的结果 df_1 = results_dict['results1'] # 获取i="2"对应的结果 df_2 = results_dict['results2']
如果你觉得键名没必要带"results"前缀,也可以直接用i作为键,更简洁:
results_dict[i] = pandas_gbq.read_gbq(query, project_id='privacyreasons') # 访问时用results_dict['1']、results_dict['2']
不推荐的方法:动态创建全局变量
虽然可以通过globals()动态生成变量,但这种方式会污染全局命名空间,后期调试和维护很麻烦,不建议使用:
import pandas_gbq import pandas as pd query_list = ["1", "2"] for i in query_list: query = f'''SELECT * FROM TABLEA WHERE CONDITION LIKE '%{i}%' GROUP BY 1''' # 动态创建全局变量results1、results2 globals()[f'results{i}'] = pandas_gbq.read_gbq(query, project_id='privacyreasons')
这样你可以直接使用results1、results2变量,但这种做法风险较高,比如如果i的值和现有变量名冲突,会覆盖原有变量。
内容的提问来源于stack exchange,提问作者ctjanalytics
相关产品推荐
相关产品推荐

