2012-09-10 21 views
10

Powiedzmy, że stworzyłem system baz danych produktów dla różnych działów mojej firmy. Każdy dział ma własną PostgreSQL-databse-instancję z różnych powodów. Schematy baz danych są takie same, jednak dane w nich nie są. Dla każdego z tych systemów istnieje aplikacja Python, która wykonuje pewną logikę biznesową (nieistotną). Każda aplikacja Python uzyskuje dostęp do swoich i tylko baz danych poprzez SQLAlchemy.Jak używać SQLAlchemy do bezproblemowego dostępu do wielu baz danych?

Chcę utworzyć system Supervisior-System, który będzie miał dostęp do wszystkich danych we wszystkich tych bazach danych (funkcja od nowa).

Oto przykład tego, co o tym myślę: enter image description here

mogę zrobić z SQLAlchemy? Jeśli tak, jakie jest najlepsze podejście do tego rodzaju problemu?

Odpowiedz

10

Oczywiście możesz to zrobić za pomocą SQLAlchemy.

Wszystko, co musisz zrobić, to stworzyć różne silniki połączeń, każdy z własnym narzędziem do tworzenia sesji. Nic w SQLAlchemy ogranicza Cię tylko do jednej bazy danych na raz.

engines = [] 
sessions = [] 
for dbconninfo in databases: 
    engine = create_engine(dbconninfo) 
    engines.append(engine) 
    sessions.append(sessionmaker(bind=engine)()) 

Można użyć każdej sesji do uruchamiania kwerend, obiekty wynikowe są dołączone do sesji, które je wyprodukowało, tak że zmiany płynąć z powrotem do właściwej bazy danych. Szczegółowo zapoznaj się z session documentation, aby zobaczyć, co się stanie, jeśli np. Chcesz scalić obiekt z jednej sesji do drugiej.

+0

I mogę następnie wysłać zapytanie do wszystkich plików DBA naraz? – AME

+1

@AME: Tak długo, jak zachować wyniki oddzielne; nie próbuj dodawać wyników z jednej sesji do drugiej. –

Powiązane problemy