Я создаю веб-приложение, используя WebApp2, SQLAlchemy, Apache, PostgrSQL и т. д. У меня есть файл config
, в котором хранятся учетные данные базы данных и создается объект сеанса с использованием scoped_session. Прямо сейчас все мои файлы просмотра импортируют этот файл конфигурации и используют объект сеанса следующим образом:
some_view.py
import config
def view():
query = config.session.query(bla bla)
Этот подход не является окончательным, и я хочу использовать наилучший возможный метод.
Здесь я хочу добиться некоторого способа получения объекта сеанса с помощью встроенного метода, связанного с decorator или webapp2, чтобы после выполнения функции представления объект сеанса закрывался. Я пробовал много способов, но не смог этого добиться. Работающий фрагмент будет высоко оценен.
Если у кого-то есть лучший подход, пожалуйста, предложите.
Спасибо
Редактировать -----
@javex: Спасибо за предложение. Я ищу класс декоратора, который при вызове вернет объект scoped_session и, когда работа будет завершена, закроет сеанс. Для справки вот пример кода, но он не работает.
class GetDBSession(object):
"""Decorator class to create DB session object"""
def __init__(self):
self.session = scoped_session(sessionmaker(bind=database_engine))
def __exit__(self): #Dont know if it works
self.session.close()
def __call__(self): #Dont know if it works
return self.session
И я хочу использовать его так:
@GetDBSession()
def view_func():
#work with session object here