2017-09-11 1 views
0

Je souhaite trouver un moyen de me connecter dynamiquement à la base de données secondaire si la base de données principale est dépassée. J'ai beaucoup réorganisé et trouvé des solutions qui n'utilisent que le SQLAlchemy et non le Flask-SQLAlchemy. La solution recommandée était comme ci-dessous.Connexion dynamique à une base de données différente en cas de défaillance de Flask-SQLAlchemy

engine1 = create_engine(...) 
engine2 = create_engine(...) 
Session1 = sessionmaker(bind=engine1) 
Session2 = sessionmaker(bind=engine2) 
session1 = scoped_session(Session1, scopefunc=...) 
session2 = scoped_session(Session2, scopefunc=...) 

Et je veux construire un échec quelque chose de sûr comme ci-dessous .. la synthaxe est dans le code psuedo.

if not request_has_connection: 
    db = SQLAlchemy(app) # instantiate db with different config that has different db URI. 

Le problème est que, Flask-SQLAlchemy ne permet pas aux utilisateurs de moteur instancier séparément, le db qui est utilisé par chaque modèle est tout instancié d'une ligne qui est db=SQLAlchemy(app)

Comment puis-je changer dynamiquement l'URI de la base de données en secondaire si le primaire a un délai d'attente ou s'il a perdu sa connexion?

Merci

Répondre

0

Peut-être dans les usines se ressemblent d'application (here)? Si vous liez votre instance d'application à votre base de données en utilisant la méthode paresseuse, vous pouvez charger un objet/fichier de configuration différent. Je ne sais pas ce que la structure de votre projet est vraiment en ce moment - mais quelque chose comme

db = SQLAlchemy() 

puis après vous

app = Flask(__name__) 
db.init_app(app) 

Découvrez cet extrait flacon (here) sur une configuration Lazy SQLAlchemy.