我想在两个不同的数据库中创建我的模型(例如,在Postgres和Redshift中),具有不同的shema名称。例如,在postgres中我有架构 public ,在redshift架构中称为 data 。
例如,我有两个引擎:
SQLALCHEMY_BINDS = {
'bind1': app.config['SQLALCHEMY_DATABASE_URI'],
'data' 'redshift+psycopg2://dbuser:pass@dbhost.redshift.amazonaws.com:5439/mydb'
}
这是一个模型:
class Campaign(Base):
__tablename__ = 'campaign'
#__bind_key__ = 'data'
campaignid = Column(Integer, primary_key=True)
campaign_name = Column(String(120))
smth = Column(BigInteger)
首先,我尝试创建声明性基础并明确绑定它(这很好但不能解决我的问题'我需要为每个模式/引擎定义两次模型):
engine = create_engine('redshift+psycopg2://dbuser:pass@dbhost.redshift.amazonaws.com:5439/mydb')
Base = declarative_base()
Base.metadata = MetaData(bind=engine, schema='data')
Base.metadata.create_all(bind=engine)
我想使用相同的模型并在不同的DB上以不同的模式创建它。所以我可以使用 bind_key 来指示我想要使用哪个数据库,但也为不同的数据库指出不同的模式名称。
感谢任何提示。