sql >> Database teknologi >  >> RDS >> PostgreSQL

Brug af flere POSTGRES-databaser og skemaer med den samme Flask-SQLAlchemy-model

Endelig fundet en løsning på dette.

Grundlæggende oprettede jeg ikke nye klasser for hver database, jeg brugte bare forskellige databaseforbindelser til hver.

Denne metode i sig selv er ret almindelig, den vanskelige del (som jeg ikke kunne finde eksempler på) var at håndtere skemaforskelle. Jeg endte med at gøre dette:

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



  1. Aritmetisk overløbsfejl ved konvertering af varchar til datatype numerisk. '10' <=9.00

  2. Valgfrit argument i PL/pgSQL-funktionen

  3. Adgang nægtet ved indsættelse af fil i SQL Server 2012 FileTable ved hjælp af File.CreateFile på ASP.NET-webstedet

  4. Tidsindstillet e-mail-påmindelse i python