如何不用引号进行Python字符串格式化?

4xrmg8kj  于 2023-01-06  发布在  Python
关注(0)|答案(1)|浏览(160)

我正在编写一个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代码:字符串格式化将插入某些没有用引号括起来的部分?

hvvq6cgz

hvvq6cgz1#

关键部分似乎是:"ARRAY[{}]".format(",".join(dict[“parameter_1"])),,这是非常接近,但不是你似乎需要的。
问题是
"ARRAY[{}]".format(param)
您必须使用'进行修改,以便获得所需的报价:
"ARRAY['{}']".format(param)
您可以使用MWE检查此工作:

param = 44
print("ARRAY['{}']".format(param))

给出输出:

ARRAY['12']

相关问题