You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:25:30