Mam „wielu dzierżawców” Kolba aplikację internetową, która graniczy z 1 „Master” bazy danych MySQL (używane do wyszukiwania informacji o kliencie) i dziesiątki baz danych MySQL "klienta" (wszystkie mają ten sam schemat).Dynamicznie ustawienie połączenia z bazą danych Kolba-SQLAlchemy w multi-tenant app
Obecnie próbuję użyć SQLAlchemy wraz z rozszerzeniem Kolba-sqlalchemy do współpracy z bazami danych, ale jestem stara się znaleźć sposób, aby umożliwić modele zdefiniować w mojej aplikacji do dynamicznie przełączaj kontekst z jednej bazy danych klienta na inną, w zależności od klienta.
Na Flask-SQLAlchemy site, prosty przykład pokazane wzdłuż linii:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:[email protected]/db1'
db = SQLAlchemy(app)
class User(db.Model):
# Etc.
Jedynym problemem jest konfiguracja SQLALCHEMY_DATABASE_URI
odbywa się statycznie. Być może będę musiał przełączać się pomiędzy mysql://username:[email protected]/db1
i mysql://username:[email protected]/db1
(lub dowolnym innym dowolnym URI MySQL), w zależności od tego, który klient wysyła żądanie.
Znalazłem kilka podobnych pytań (patrz poniżej), ale muszę jeszcze wymyślić czysty sposób, aby to zrobić, szczególnie w przypadku korzystania z rozszerzenia Flask-SQLAlchemy.
With sqlalchemy how to dynamically bind to database engine on a per-request basis
Flask SQLAlchemy setup dynamic URI
Ja również widziałem kilka przykładów, które zostały przewidziane do obsługi sharded baz danych (które powinny mieć zastosowanie, jak również, jako bazy danych są zasadniczo sharded logicznie przez klienta), ale, znowu, nic specyficznego dla Flask-SQLAlchemy.
Jeśli ma sens, Jestem również otwarty na używanie SQLAlchemy bezpośrednio, bez rozszerzenia Flask-SQLAlchemy. Jestem nowy w SQLAlchemy - każda pomoc będzie bardzo ceniona!
Edytuj: Możliwość odzwierciedlenia schematów tabel z bazy danych byłaby dodatkowym atutem.
Czy widziałeś http://stackoverflow.com/questions/7923966/flask-sqlalchemy-with-dynamic-database-connections i jeśli tak, to jakie dalsze pytania masz? –
@SeanVieira Dzięki - Właśnie sprawdziłem tę odpowiedź i wydaje się to mieć sens.Zastanawiam się nad utworzeniem sesji na żądanie i przechowywaniem w 'flask.g'. Jestem w większości zakłopotany, jak ustawić samą klasę. W tym przykładzie 'User' jest podklasą' db.Model', a 'db' jest inicjowana z' SQLALCHEMYY_DATABASE_URI'. Czy posiadanie 'User' dziedziczy z klasy bazowej utworzonej za pomocą' sqlalchemy.ext.declarative.declarative_base() 'również działa, czy jest tam inna klasa, której mogę użyć zamiast' db.Model' Flask-SQLAlchemy, która nie jest zależna od na konkretnej konfiguracji bazy danych? – jstol
Przeczytaj to: http://flask-sqlalchemy.pocoo.org/2.1/binds/, a następnie sprawdź to: https://gist.github.com/adhorn/b84dc47175259992d406. – ramabodhi