Как правильно изменить URI базы данных в Flask-SQLAlchemy для обработки отказа?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно изменить URI базы данных в Flask-SQLAlchemy для обработки отказа?

Сообщение Anonymous »

Я использую Flask-SQLAlchemy для подключения к базе данных MariaDB. Я настроил URI базы данных в своем файле .env. Я хочу реализовать механизм аварийного переключения, чтобы в случае сбоя подключения к MariaDB он переключался на базу данных SQLite для целей тестирования.

Вот код, который я использую для настройки базы данных:

Код: Выделить всё

#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()
Примечание. Моя переменная db = SQLAlchemy() находится в папке с именем models. Кроме того, когда мой контекст приложения пытается использовать db.create_all(), возникает исключение, но при обработке исключений он по-прежнему использует тот же URI или в других случаях говорит, что соединение уже существует и что я должен использовать его для Flask.
Что я пробовал: я настроил 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»