Eindelijk een oplossing hiervoor gevonden.
In wezen heb ik geen nieuwe klassen voor elke database gemaakt, ik heb alleen verschillende databaseverbindingen voor elke database gebruikt.
Deze methode is op zichzelf vrij gebruikelijk, het lastige deel (waarvan ik geen voorbeelden kon vinden) was het omgaan met schemaverschillen. Uiteindelijk heb ik dit gedaan:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
class ContentProvider():
db = None
connection = None
session = None
def __init__(self, center):
if center == A:
self.db = create_engine('postgresql://%(user)s:%(pw)[email protected]%(host)s:%(port)s/%(db)s' % POSTGRES_A, echo=echo, pool_threadlocal=True)
self.connection = self.db.connect()
# It's not very clean, but this was the extra step. You could also set specific connection params if you have multiple schemas
self.connection.execute('set search_path=A_schema')
elif center == B:
self.db = create_engine('postgresql://%(user)s:%(pw)[email protected]%(host)s:%(port)s/%(db)s' % POSTGRES_B, echo=echo, pool_threadlocal=True)
self.connection = self.db.connect()
self.connection.execute('set search_path=B_schema')
def get_fra_list(self):
logging.debug("Fetching fra list")
fra_list = self.session.query(FRARecord.fra_code)
return fra_list