Вот код, который я использую для настройки базы данных:
Код: Выделить всё
#uri 1
app.config['SQLALCHEMY_DATABASE_URI'] = config('SQLALCHEMY_DATABASE_URI')
migrate = Migrate()
db.init_app(app)
migrate.init_app(app, db)
with app.app_context():
try:
db.create_all()
except Exception as e:
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///database_temp/database.db" #uri2 for failover
db.engine.dispose()
migrate.init_app(app, db)
db.create_all()
Что я пробовал: я настроил SQLALCHEMY_DATABASE_URI для переключения на SQLite в случае сбоя подключения к серверу MariaDB. Я также вызвал db.engine.dispose(), чтобы освободить текущий движок, и повторно инициализировал SQLAlchemy и Migrate после изменения URI.
Что я ожидал: я ожидал, что при подключении к MariaDB Сервер выходит из строя, приложение переключится на использование SQLite, как указано в SQLALCHEMY_DATABASE_URI, а db.create_all() будет работать с новой базой данных SQLite.
Что на самом деле получилось: приложение все еще пытается подключиться в MariaDB uri и выдает ошибку, указывающую, что соединение не установлено, или оно уже существует, или что оно должно использовать существующее соединение, даже если URI был изменен на SQLite при обработке исключений.
Подробнее здесь: https://stackoverflow.com/questions/788 ... er-handlin