@tttttv

SQLALCHEMY как организовать работу с сессией?

Есть цикл, который выполняется в while True, внутри него происходит много обращений к базе данных (запись, чтение, все из вложенных функций и т.д.). Возник вопрос - как лучше организовать работу с сессиями SQLALCHEMY? На данный момент просто в глобальной видимости сделал session = Session(), и к ней обращаюсь из всех функций.

Но столкнулся с проблемой. Например в начале цикла из базы фильтруется список объектов. Они меняются динамически, из сторонних источников (не связаны с самим кодом). Но sqlalchemy то ли кеширует запросы, то ли еще что - объекты приходят старые. Пришлось решать костылем, перед каждым запросом к бд добавил session.commit(), вроде бы решило проблему. Но уверен что решение очень неуверенное.
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
shabelski89
@shabelski89
engineer
Без примера кода сложно понять, но я использую декоратор для функций работы с БД.
def catch_session(func):
    """Decorator for Session"""
    @wraps(func)
    def wrapper(self, *args, **kwargs):
        print(f"Try calling db func: {func.__name__}")
        result = func(self, *args, **kwargs)
        try:
            self.session.commit()
            print(f"Success calling db func: {func.__name__}\n")
        except SQLAlchemyError as e:
            print(f"Error - {e}\n")
            self.session.rollback()
        finally:
            self.session.close()
        return result
    return wrapper


просто оборачиваете им функцию и он сам делает commit если не было ошибок, если было то rollback и сообщение об ошибке.

взято отсюда
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы