PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Korzystanie z wielu baz danych i schematów POSTGRES z tym samym modelem Flask-SQLAlchemy

Wreszcie znalazłem rozwiązanie tego problemu.

Zasadniczo nie tworzyłem nowych klas dla każdej bazy danych, po prostu używałem różnych połączeń z bazą danych dla każdej z nich.

Ta sama metoda jest dość powszechna, trudną częścią (której nie mogłem znaleźć przykładów) było radzenie sobie z różnicami w schemacie. Skończyło się na tym, że:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlAlchemy(Flask+Postgres) :Jak zaktualizować tylko określony atrybut pola json?

  2. Określanie OID tabeli w Postgresie 9.1?

  3. Ranga na podstawie sekwencji dat

  4. Tworzenie indeksów bez rozróżniania wielkości liter w tablicy ciągów Postgres

  5. Zrozumienie kolumn systemowych w PostgreSQL