我想使用列表中带有字典的列表引用以字符串格式替换 SQL 脚本中的参数。这是示例 SQL 脚本:
sql = "SELECT DISTINCT id, channel AS value FROM ${source} WHERE channel IN (${channel});"
所有查询都采用以下结构:
{'name': 'example', 'description': 'example1', 'sql': 'SELECT DISTINCT id, channel AS value FROM ${source} WHERE channel IN (${channel});'}
字典如下所示:
my_dict = [{"source":"table_name","channel":["abc","abcd"]}]
所需的输出为:
SELECT DISTINCT pnr, channel AS value FROM table_name WHERE channel IN ("abc", "abcd");
注意:通道参数可以具有单个值:my_dict = [{"source":"table_name","channel":["abc"]}]
牢记这一点非常重要。
我正在考虑.split
查询并替换参数,但由于某种原因它不起作用并且通道没有引号。我需要将它们放在引号中,以便稍后可以执行查询。
queries = sql.split()
final_string = ' '.join(str(my_dict.get(word, word)) for word in queries)
我找到了另一个解决方案,但无法为我的情况实施:用 python 字典中的值替换字符串中的值
你拥有的不是字典,而是列表。如果您对列表第一个位置的字典感兴趣,您可以使用 f 字符串并执行以下操作:
>>> sql = f"SELECT DISTINCT id, channel AS value FROM {my_dict[0]['source']} WHERE channel IN {tuple(my_dict[0]['channel'])};"
>>> sql
"SELECT DISTINCT id, channel AS value FROM table_name WHERE channel IN ('abc', 'abcd');"