2016-03-14 90 views
2

我有这有它取决于正在传递例如参数一串SQL查询的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

查询保持人类可读性(即换行符)很重要吗? – lucasnadalutti

+0

其意图是,他们将不得不保持这么好,需要保持人的可读性。 – whoisearth

回答

1

将每个参数与相应查询相关联的字典似乎是最好的主意。考虑到这一点,我看到这种方法

1)有一个常数在文件的顶部,包含此字典。例如为:

ARGUMENTS_DICT = { 
    'Argument One': (
     'select *' 
     'from table' 
     'where etc' 
    ), 
    ... 
} 

2)具有在另一个文件(Python模块相同的常数),并将其导入到当前的模块。例如: -

from .arguments_dict import ARGUMENTS_DICT 

3)有了这个字典作为一个JSON文件JSON对象,并使用Python的json module将其加载为一个字典。这里的缺点是,为了保持查询的可读性,每个查询需要在列表元素中拆分,并在Python中加载时加入。例如:

// arguments_dict.json 
{ 
    'Argument One': [ 
     'select *', 
     'from table', 
     'where etc' 
    ], 
    ... 
}