sql >> Database >  >> RDS >> PostgreSQL

Meerdere POSTGRES-databases en -schema's gebruiken met hetzelfde Flask-SQLAlchemy-model

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



  1. Bijwerkquery - Oracle

  2. Hoe te ontsnappen aan het letterlijke procentteken wanneer de optie NO_BACKSLASH_ESCAPES is ingeschakeld?

  3. Hoe kan ik CONCAT tijdens SELECT in MySQL als kolomnaam gebruiken?

  4. Hoe json-array te converteren naar postgres int-array in postgres 9.3