我正在尝试使用如下所示的嵌套参数化查询:
def generate_params():
...
params = {
'sub_query': get_sub_query(),
'sub_query_param1': 1,
'sub_query_param2': 2,
'sub_query_param3': 3
}
return params
def generate_and_execute_query(params):
sql = """
SELECT * FROM %(sub_query)s
FILE_FORMAT = (type = %(file_format)s, %(format_options)s)
HEADER = FALSE
%(export_options)s
"""
params.update({
'file_format': 'txt',
'file_options': 'None',
'export_options': 'None'
})
execute(sql, params)
execute(generate_params())
因此,由于sub_query_param1
,sub_query_param2
,sub_query_param3
未填写子查询,因此此代码无法正常工作。
我还考虑过使用格式字符串或参数化语句为sub_query预填充参数,但是格式字符串具有SQL注入漏洞,而参数化语句导致我多次使用sub_query_param1
或sub_query_param2
时代码变脏。
有人可以给我任何建议吗? 预先谢谢你!