В приложении Flask, использующем SQLAlchemy, нормально ли постоянно помещать `session.rollback` в начале приложения? - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в Flask и веб-разработке в целом.У меня есть веб-приложение Flask, использующее SQLAlchemy. Можно ли поместить session.rollback в начале приложения, чтобы продолжало работать даже после сбоя транзакции?У меня была проблема с моим сайтом, когда он перестал работать после того, как я пытался удалить записи одной таблицы.Журнал ошибок показал, что удаление не удалось из-за записей в другой таблице, все еще ссылающихся на эти записи в качестве их внешнего ключа.В журнале ошибок предлагалось использовать session.rollback для отката этого изменения, поэтому я поместил его в начало моего приложения сразу после привязки моей базы данных и создания сеанса, и мой веб-сайт работал.Это дало мне подсказку оставить эту линию там.Мое движение правильно, безопасно и хорошо?Может кто-нибудь сказать мне, что делать правильно, если это каким-то образом ставит под угрозу функциональность или логику моего сайта?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

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

Проблема, которую вы описываете, является результатом использования внешних ключей для обеспечения целостности данных в вашей базе данных.Обычно SQLAlchemy аннулирует все зависимые внешние ключи, но, поскольку я ничего не знаю о вашей настройке, я не могу объяснить, почему это не так.Возможно, это различие между базами данных.

Одна из серьезных проблем с размещением отката в начале маршрута (или всего глобального приложения) заключается в том, что вы можете откатывать данные, которые вам не нужны.Вы не предоставили MVCE , поэтому никто не может реально помочь вам отладить вашу проблему.

Кодирование культа груза в подобных обстоятельствах понятно, но это никогда не бывает хорошей практикой.Чтобы решить эту проблему, исследуйте каскады в SQLAlchemy.Кроме того, запустите ваш фактический интерфейс базы данных SQL и посмотрите на структуру данных, и установите SQLALCHEMY_ECHO = 1 в вашем конфигурационном файле, чтобы увидеть, что на самом деле излучается.

Удачи!

0 голосов
/ 25 февраля 2019

Не следует использовать откат в начале, но при сбое операции с базой данных.Ошибка связана с состоянием целостности в вашей базе данных.На некоторые строки в вашей таблице ссылается другая таблица.Итак, сначала вы должны удалить ссылки на строки.

...