假设我在单个PostgreSQL数据库中有两个模式,并且每个模式都包含具有相同名称的表。例如:schema1.table,schema2.table。
我使用SQLAlchemy来处理数据库。
第一个问题是我无法将指定具体模式的数据库中的表反映到显式创建的类中。例如:
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
第二个问题是我正在寻找一种方法将一个显式创建的类与来自不同模式的表绑定,并按如下方式使用它:
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
...
有没有办法解决或解决所描述的问题?
答案 0 :(得分:0)
SQLAlchemy Table
对象允许您传递schema
argument。
使用声明式参数,使用Table
将documented here传递给基础__table_args__
对象。
class MyTable(DeferredReflection, Base):
__tablename__ = 'my_table'
__table_args__ = {'schema': 'schema2'}
您必须为不同的模式创建单独的表。