sql >> データベース >  >> RDS >> PostgreSQL

同じFlask-SQLAlchemyモデルで複数のPOSTGRESデータベースとスキーマを使用する

    ついにこれに対する解決策を見つけました。

    基本的に、データベースごとに新しいクラスを作成するのではなく、データベースごとに異なるデータベース接続を使用しました。

    この方法自体はかなり一般的であり、トリッキーな部分(例を見つけることができませんでした)はスキーマの違いを処理することでした。私はこれをやった:

    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. 月ごとのSQL結果グループ

    2. オラクルで土曜日、日曜日、祝日を除く48時間の日付を見つける方法

    3. where句を使用したスローカウントクエリ

    4. SQLDeveloperとExcelで異なるOracle出力