如何在python中将一个变量作为函数中的另一个变量传递

toiithl6  于 2023-01-04  发布在  Python
关注(0)|答案(4)|浏览(119)

我有一个SQL变量mem_dep,当我直接在变量sql中使用它时,它工作得非常好。它打印了正确的SQL语句,但当我在变量sql中传递另一个变量cat时,值为"mem_dep",它工作得不好。它只是打印了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() # calling function
SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '20223456' # printing sql

但是如果我在一个函数中传递变量cat,并且该变量与变量名mem_dep具有相同的值,那么下面的代码将无法工作

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

输出:

calc(cat) # calling function
mem_dep #printing sql

在这种情况下,如何将SQL变量作为函数中的变量传递?
我也尝试了下面的代码,但没有工作

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

输出:

calc(cat) # calling function
mem_dep #printing sql

预期产出:

SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '20223456' # printing sql
y1aodyip

y1aodyip1#

谢谢!!!我用eval(cat)解决了这个问题
答案应该是

sql = eval(cat).format(Business_date = cob)
bwitn5fc

bwitn5fc2#

据我所知,cat具有包含您的SQL字符串的SQL变量的名称。并且您希望在不知道cat的值的情况下从cat访问SQL字符串。您可以使用getattr来实现此目的,并将所有内容 Package 在一个类中,如下所示:

class SQLCalc:
    def __init__(self):
        self.mem_dep = """SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '{Business_date}'"""
        self.cob = "20223456"
        self.cat = "mem_dep"

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

sql_calc = SQLCalc()
sql_calc.calc()
fhg3lkii

fhg3lkii3#

对于此输出

SELECT * FROM TABLE1 WHERE DT2_BUSINESS = '20223456'

必须在calc()中将mem_dep作为参数提供

calc(mem_dep)
wz8daaqr

wz8daaqr4#

也许像这样:

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

def calc(sql_template, buisness_date): 
    return sql_template.format(Business_date = buisness_date)
    
mem_dep_result = calc(mem_dep, cob)
print(mem_dep_result)

相关问题