Я пишу приложение с python и sqlalchemy-0.7. Он начинается с инициализации orm sqlalchemy (с использованием декларативного), а затем запускает многопоточный веб-сервер - в настоящее время я использую web.py для быстрого прототипирования, но это может измениться в будущем. Я также добавлю другие «потоки» для запланированных заданий и так далее, возможно, используя другие потоки Python.
Из документации SA я понимаю, что должен использовать scoped_session () для получения сеанса локального потока, поэтому мое приложение web.py должен выглядеть примерно так:
import web
from myapp.model import Session # scoped_session(sessionmaker(bind=engine))
from myapp.model import This, That, AndSoOn
urls = blah...
app = web.application(urls, globals())
class index:
def GET(self):
s = Session()
# get stuff done
Session().remove()
return(stuff)
class foo:
def GET(self):
s = Session()
# get stuff done
Session().remove()
return(stuff)
Это правильный способ обработки сеанса?
Насколько я понимаю, я должен получать scoped_session для каждого метода, поскольку он ' предоставлю мне локальный сеанс потока, который я не мог получить заранее (например, на уровне модуля).
Кроме того, я должен вызывать .remove () или .commit () или что-то вроде них на каждом конец метода, иначе сеанс по-прежнему будет содержать Постоянные объекты, и я не смогу запрашивать / получать доступ к тем же объектам в других потоках?
Если этот шаблон правильный, его, вероятно, можно было бы создать лучше всего один раз написать, может быть, с помощью декоратора? Такой декоратор может получить сеанс, вызвать метод, а затем убедиться, что он правильно удалил сеанс. Как это передать сеанс декорированной функции?