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

Python中如何通过变量传递调用目标SQL变量实现格式化

问题描述

我有一个SQL模板变量mem_dep,直接在sql变量中使用它时可以正常生成正确的SQL语句;但当我将值为"mem_dep"的变量cat传入函数后,无法正常工作,仅输出cat的字符串值。

代码示例

mem_dep = """SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '{Business_date}'"""
cob = "20223456"
cat = "mem_dep"

可正常运行的代码

def calc():
    sql = mem_dep.format(Business_date = cob)
    print(sql)

调用与输出:

calc()  # 调用函数
# 输出:SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '20223456'

无法正常工作的代码

def calc(cat):
    sql = cat.format(Business_date = cob)
    print(sql)

调用与输出:

calc(cat)  # 调用函数
# 输出:mem_dep

尝试过的无效代码

def calc(cat):
    tmp_sql = "{}".format(cat)
    sql = tmp_sql.format(Business_date = cob)
    print(sql)

调用与输出:

calc(cat)  # 调用函数
# 输出:mem_dep

期望输出

SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '20223456'
解决方案

问题核心是:你传递的cat是字符串"mem_dep",而非指向SQL模板的变量本身。Python不会自动将字符串解析为变量名,所以直接调用cat.format()只是在操作字符串"mem_dep",而非mem_dep变量存储的SQL模板内容。

以下是几种可行的解决方法:

方法1:直接传递模板变量而非字符串

把实际的模板变量mem_dep作为参数传入函数,而不是它的字符串名称:

def calc(template):
    sql = template.format(Business_date = cob)
    print(sql)

calc(mem_dep)  # 调用函数,直接传入模板变量

这种方式直接传递模板对象,能直接得到期望的输出,是最直观安全的方案。

方法2:用字典映射模板名称到模板变量

如果必须通过字符串名称引用模板,可以将所有SQL模板存入字典,通过键名获取对应模板:

# 定义模板字典统一管理
sql_templates = {
    "mem_dep": """SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '{Business_date}'"""
}
cob = "20223456"
cat = "mem_dep"

def calc(cat):
    template = sql_templates.get(cat)
    if template:
        sql = template.format(Business_date = cob)
        print(sql)
    else:
        print(f"找不到名为{cat}的SQL模板")

calc(cat)  # 调用函数

这种方法便于维护多个SQL模板,避免直接操作变量名的风险。

方法3:通过globals()/locals()获取变量(不推荐)

可以通过全局/局部命名空间字典根据字符串获取变量,但这种方式不安全且不利于代码维护,仅作了解:

mem_dep = """SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '{Business_date}'"""
cob = "20223456"
cat = "mem_dep"

def calc(cat):
    template = globals().get(cat)
    if template:
        sql = template.format(Business_date = cob)
        print(sql)
    else:
        print(f"找不到名为{cat}的变量")

calc(cat)  # 调用函数

内容的提问来源于stack exchange,提问作者Kelly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:50:20