我有一个python文件,其中包含一堆sql查询,具体取决于传递的参数示例如下:
if args.monitor == 'Argument One':
sql_query = """select a, b, c from tableA where a = 123"""
elif args.monitor == 'Argument Two':
sql_query = """select d, e, f from TableA where d = 456"""
elif ....
对于大约10个具有不同复杂性的不同查询,这种情况仍在继续。
显然,这会使代码混乱,并且更新和/或添加SQL查询涉及触及大量代码。我想做的是将查询/参数分成某种词典。为此可以使用配置文件,我可以执行以下操作吗?
[query]
Argument A = select a, b, c from tableA where a = 123
Argument B = select d, e, f from TableA where d = 456
然后通过ConfigParser调用。我担心的是有些查询很长(最多10行),那我怎么在配置文件中表示呢?
或者我将每个查询保存为ArgumentA.sql
,然后列出目录,如果参数匹配,那么使用该sql?
之前有没有人接触过这样的情景?
答案 0 :(得分:1)
将每个参数与相应查询相关联的字典似乎是最好的主意。考虑到这一点,我看到了几种方法
1)在包含此dict的文件顶部有一个常量。 E.g:
ARGUMENTS_DICT = {
'Argument One': (
'select *'
'from table'
'where etc'
),
...
}
2)在另一个文件(Python模块)中从 1 获得相同的常量并将其导入当前模块。 E.g:
from .arguments_dict import ARGUMENTS_DICT
3)将此dict作为JSON文件中的JSON对象并使用Python json module将其作为dict加载。这里的缺点是,为了保持查询的可读性,每个查询都需要在列表的元素中拆分,并在Python中加载时加入。 E.g:
// arguments_dict.json
{
'Argument One': [
'select *',
'from table',
'where etc'
],
...
}