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