不清楚您的目标是什么,因为查询字符串看起来没那么有用,但是,您可以使用列表推导式创建一个包含替换的查询列表:
def sub_view(qry, subqueries):
return [f"{qry} SELECT * FROM {table} WHERE id='weather'" for table in subqueries]
>>> subqueries = ['name','name2','name3']
>>> sub_view('Some prefix string', subqueries)
["Some prefix string SELECT * FROM name WHERE id='weather'", "Some prefix string SELECT * FROM name2 WHERE id='weather'", "Some prefix string SELECT * FROM name3 WHERE id='weather'"]
这将返回一个列表。要将每个查询绑定到一个变量,您需要知道列表中有多少项目及其顺序。你可以像这样手动编码:
>>> name, name2, name3 = sub_view('Some prefix string', subqueries)
>>> name
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> name2
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
>>> name3
"Some prefix string SELECT * FROM name3 WHERE id='weather'"
鉴于您需要事先了解变量计数,您可以使用该列表。称它为names 并按索引引用“变量”:
>>> names = sub_view('Some prefix string', subqueries)
>>> names[0]
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> names[1]
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
...
或者使用字典推导来创建字典:
def sub_view(qry, subqueries):
return {table: f"{qry} SELECT * FROM {table} WHERE id='weather'" for table in subqueries}
>>> queries = sub_view('Some prefix string', subqueries)
>>> queries
{'name': "Some prefix string SELECT * FROM name WHERE id='weather'", 'name2': "Some prefix string SELECT * FROM name2 WHERE id='weather'", 'name3': "Some prefix string SELECT * FROM name3 WHERE id='weather'"}
>>> queries['name']
"Some prefix string SELECT * FROM name WHERE id='weather'"
>>> queries['name2']
"Some prefix string SELECT * FROM name2 WHERE id='weather'"
...
最后一个示例可能最接近您想要的。它将处理任意数量的查询,您仍然可以通过使用名称作为字典查找的键来访问各个查询。