Python = хранение нескольких запросов 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?

Кто-нибудь подходил к подобному сценарию раньше?

1 ответ

Дикт, который связывает каждый аргумент с соответствующим запросом, кажется лучшей идеей. Учитывая это, я вижу несколько подходов к этому

1) Наличие константы в верхней части файла, который содержит этот dict. Например:

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

2) Наличие той же константы из 1 в другом файле (модуль Python) и импорт ее в текущий модуль. Например:

from .arguments_dict import ARGUMENTS_DICT

3) Наличие этого dict в качестве объекта JSON в файле JSON и использование модуля json в Python для загрузки его в качестве dict. Недостатком здесь является то, что для обеспечения читабельности запроса каждый запрос должен быть разбит на элементы списка и объединен при загрузке в Python. Например:

// arguments_dict.json
{
    'Argument One': [
        'select *',
        'from table',
        'where etc'
    ],
    ...
}
Другие вопросы по тегам