0
1つのPostgreSQLデータベースに2つのスキーマがあり、各スキーマに同じ名前のテーブルが含まれているとします。たとえば、schema1.table、schema2.tableなどです。SQLAlchemy:明示的に作成されたクラスにテーブルを反映
データベースの操作にSQLAlchemyを使用します。
最初の問題は、明示的に作成されたクラスに具体的なスキーマを指定してデータベースからテーブルを反映できないことです。たとえば:
session = Session()
with schema_context('schema1'):
data = session.query(Table).all() # Table refers to schema1.table
...
with schema_context('schema2'):
data = session.query(Table).all() # Table refers to schema2.table
...
はにはいくつかの方法があります:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import DeferredReflection
Base = declarative_base()
class Table(DeferredReflection, Base):
__tablename__ = 'table'
## somehow specify schema for table
engine = create_engine(
'postgresql+psycopg2://localhost/postgres',
isolation_level='READ UNCOMMITTED'
)
DeferredReflection.prepare(engine)
## do something using reflected table
第二の問題は、次のように私は別のスキーマからテーブルを1つの明示的に作成したクラスをバインドし、それを使用する方法を探していますということです説明した問題を回避するか解決しますか?