PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използване на множество POSTGRES бази данни и схеми с един и същ модел Flask-SQLAlchemy

Най-накрая намерих решение за това.

По същество не създадох нови класове за всяка база данни, просто използвах различни връзки към база данни за всяка.

Този метод сам по себе си е доста често срещан, сложната част (за която не можах да намеря примери) беше обработката на разликите в схемата. В крайна сметка направих това:

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. На какво ниво имената на индексите на Postgres трябва да бъдат уникални?

  2. Как Acosd() работи в PostgreSQL

  3. Как да коригирам PG::DuplicatePstatement:ГРЕШКА?

  4. Как да управлявате вашите PostgreSQL бази данни от ClusterControl CLI

  5. Защо прагът на подготвения израз на PostgreSQL JDBC е по подразбиране 5?