Универсальная функция для запросов к БД (Python + SQLite3)
В пет проекте есть функции по типу той, что приложу ниже. Вопрос такой: в каждой подобной функции есть конструкция "with sqlite3.connect('some.db') as connection:" и блок "try.... except". Запросы разные, количество принимаемых и отдаваемых аргументов разное.
Адекватно будет создать универсальную функцию "func(*args, **kwargs)", в которую я буду передавать запрос и параметры? Что лучше с точки зрения best practices? Или есть другие варианты?
Сейчас мой проект поделен на кучу модулей и я думаю о том, чтобы сократить / убрать некоторые из них. ООП не совсем понимаю, поэтому пока так.
Функция для добавления записи в журнал, подобные функции есть для чтения, всяких фильтров и т.д.:
def add_new_note(user_id):
note = input('ВВЕДИТЕ ТЕКСТ: ')
date = datetime.today().strftime("%H:%M-%d.%m.%Y")
with sqlite3.connect('some.db') as connection:
cursor = connection.cursor()
try:
with connection:
query = '''INSERT INTO Journal (id_user, note, date)
VALUES ({}, {}, {})'''.format(user_id, note, date)
cursor.execute(query)
except Exception:
print("тут ошибки какие-то")
print("Запись добавлена")
Ответы (1 шт):
Создайте свой менеджер контекста:
from contextlib import contextmanager
@contextmanager
def open_cursor(dbfile):
with sqlite3.connect(dbfile) as connection:
cursor = connection.cursor()
try:
with connection:
yield cursor
except Exception:
print("тут ошибки какие-то")
Использовать так:
def add_new_note(user_id):
note = input('ВВЕДИТЕ ТЕКСТ: ')
date = datetime.today().strftime("%H:%M-%d.%m.%Y")
with open_cursor('some.db') as cursor:
query = '''INSERT INTO Journal (id_user, note, date)
VALUES ({}, {}, {})'''.format(user_id, note, date)
cursor.execute(query)
print("Запись добавлена")