Удалить сеанс по каждому запросу при использовании raw sqlalchemy - PullRequest
0 голосов
/ 22 мая 2019

Я должен использовать необработанную библиотеку SqlAlchemy с приложением Flask из-за некоторых вещей.

Когда я прочитал эту ссылку , я натолкнулся на следующее: «Чтобы использовать SQLAlchemy декларативным способом с вашимприложения, вам просто нужно вставить следующий код в модуль приложения. Flask автоматически удалит сеансы базы данных в конце запроса или при завершении работы приложения ".Вот код:

from yourapplication.database import db_session

@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()

Зачем мне это нужно?Что будет, если я не добавлю этот код?

1 Ответ

1 голос
/ 23 мая 2019

Не предоставляя точной причины, по которой вам это нужно, позвольте мне предложить практическую причину.

sessions существует для координации изменений в базе данных до их фактической фиксации и окончательного сохранения.Когда вы выполняете session.commit(), выполняется полный набор изменений.Он либо потерпит неудачу полностью, либо преуспеет полностью.Если вы не очищаете session после каждого request, то оно будет сохраняться, и может произойти следующее:

1) Вы выполняете неверный запрос, который изменяет сеанс с элементами, вызывающими разрыв, и оставляетесессия открыта.Вы выполняете новый запрос (в том же сеансе), который является действительным, и пытаетесь зафиксировать.Сбой из-за ошибки в первом запросе.Ваше приложение не отделено и разумно разделено на небольшие модульные компоненты.Его сложно отладить, так как вы ожидаете ошибку во втором запросе.

2) Вы выполняете правильный запрос и вносите некоторые изменения.Возможно, выполняется сброс для доступа к идентификаторам перед фиксацией.Однако сеанс не зафиксирован.В какой-то неопределенный момент времени в будущем будет сделан другой запрос на существующий (открытый) сеанс.Сейчас она устарела, поскольку за это время произошло еще много изменений.Новый коммит может завершиться неудачно и снова будет трудно его отладить.

.. возможно, много других причин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...