如何将字符串作为 f-string 传递给另一个方法?
How to pass in string as f-string into another method?
我计划将多个基于 f 字符串的模板传递到另一个遍历数据库和表的通用方法中。
我的代码:
@staticmethod
def query1_template():
query = '''
SELECT
'{db}' as db_name,
'{tbl}' as tbl_name,
'{config[db][tbl]['definition']}' as definition
'''
return query
def build(self, query, config):
etl = ''
for i, db in enumerate(self.datasets):
for j, tbl in enumerate(self.datasets.get(db)):
if i > 0 or j > 0:
etl += 'UNION ALL'
etl += query
当前输出:
SELECT
'{db}' as db_name,
'{tbl}' as tbl_name
UNION ALL
SELECT ...
我的预期输出应该实际填写 {db}
和 {tbl}
值。
我也试过 etl += query.format(db, tbl)
但一直收到 db 的关键错误。
有没有办法让这个逻辑起作用?
在query1_template()
方法中:
query = '''
SELECT
'{db}' as db_name,
'{tbl}' as tbl_name,
'{definition}' as definition
'''
在build()
方法中:
etl += query.format(db=db, tbl=tbl, definition=config[db][tbl]['definition']
我计划将多个基于 f 字符串的模板传递到另一个遍历数据库和表的通用方法中。
我的代码:
@staticmethod
def query1_template():
query = '''
SELECT
'{db}' as db_name,
'{tbl}' as tbl_name,
'{config[db][tbl]['definition']}' as definition
'''
return query
def build(self, query, config):
etl = ''
for i, db in enumerate(self.datasets):
for j, tbl in enumerate(self.datasets.get(db)):
if i > 0 or j > 0:
etl += 'UNION ALL'
etl += query
当前输出:
SELECT
'{db}' as db_name,
'{tbl}' as tbl_name
UNION ALL
SELECT ...
我的预期输出应该实际填写 {db}
和 {tbl}
值。
我也试过 etl += query.format(db, tbl)
但一直收到 db 的关键错误。
有没有办法让这个逻辑起作用?
在query1_template()
方法中:
query = '''
SELECT
'{db}' as db_name,
'{tbl}' as tbl_name,
'{definition}' as definition
'''
在build()
方法中:
etl += query.format(db=db, tbl=tbl, definition=config[db][tbl]['definition']