python =存储多个sql查询

时间:2016-03-14 21:00:52

标签: python sql sql-server pyodbc

我有一个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?

之前有没有人接触过这样的情景?

1 个答案:

答案 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'
    ],
    ...
}