PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwenden mehrerer POSTGRES-Datenbanken und -Schemas mit demselben Flask-SQLAlchemy-Modell

Endlich eine Lösung dafür gefunden.

Im Wesentlichen habe ich keine neuen Klassen für jede Datenbank erstellt, sondern nur unterschiedliche Datenbankverbindungen für jede verwendet.

Diese Methode an sich ist ziemlich verbreitet, der knifflige Teil (für den ich keine Beispiele finden konnte) war der Umgang mit Schemaunterschieden. Am Ende habe ich das gemacht:

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