我正在编写一个Python函数,它为SQL查询进行字符串格式化,因此字符串格式化需要非常精确。
目前,我有一个SQL查询模板字符串,我正尝试使用str.format()
填充值。
想象一下这样的情况:
sql_query_template.format(arg1=arg1, arg2=arg2)
我遇到的一个问题是Python字符串中引号的位置。
预期结果:
(ARRAY[‘blah’, ‘25’], ‘test_group_1’, '243'),(ARRAY[‘blah2’, '12'], ‘test_group_2', '21')
- 目标是在使用
ARRAY[]
关键字时创建元组,重要的是ARRAY[]
不能变成‘ARRAY[]’
,或者整个元组要用引号括起来-〉SQL需要将关键字视为关键字。
当前结果:
(‘ARRAY[blah, 25]’, ‘test_group_1’, '243'),(‘ARRAY[blah2, 12]’, ‘test_group_2', '21')
- 这里
ARRAY[]
用引号括起来(例如:‘ARRAY[blah, 25]'
) - 这是有问题的,因为Presto不会将
ARRAY
识别为关键字,而是将‘ARRAY[]’
视为字符串
当前代码段:
# dummy example:
test_dict = json.loads(
json.dumps(
[
{
"parameter_1": ["blah", "25"],
"parameter_2": "test_group_1",
"parameter_3": "243",
},
{
"parameter_1": ["blah2", "12"],
"parameter_2": "test_group_2",
"parameter_3": "21",
},
]
)
)
list_of_tuples = []
for dict in test_dict:
list_of_tuples.append(
(
"ARRAY[{}]".format(",".join(dict[“parameter_1"])),
dict["parameter_2"],
f"{dict[parameter_3]}",
)
)
formatted_tuples = ",".join(
str(tup) for tup in list_of_tuples
)
print(sql_query_template.format(arg1=formatted_tuples))
有没有可能以这样一种方式来编写Python代码:字符串格式化将插入某些没有用引号括起来的部分?
1条答案
按热度按时间hvvq6cgz1#
关键部分似乎是:
"ARRAY[{}]".format(",".join(dict[“parameter_1"])),
,这是非常接近,但不是你似乎需要的。问题是
"ARRAY[{}]".format(param)
您必须使用
'
进行修改,以便获得所需的报价:"ARRAY['{}']".format(param)
您可以使用MWE检查此工作:
给出输出: