我正在尝试在烧瓶sqlalchemy 中设置多个具有相同模型的数据库
一个样本模型看起来像下面
db = flask.ext.sqlalchemy.SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_default_schema_db_uri'
app.config['SQLALCHEMY_BINDS'] = {'other_schema': ''mysql+pymysql://'+UNMAE+':'+PASS+'@'+SERVERURL+':3306/'+ DBNAME,'##your_other_db_uri}
class TableA(db.Model):
# This belongs to Default schema, it doesn't need specify __bind_key__
...
class TableB(db.Model) :
# This belongs to other_schema
__bind_key__ = 'other_schema'
...
db.create_all()
工作良好,并在各自的模式中创建表。
我一直在关注https://stackoverflow.com/a/34240889/8270017并希望使用创建一个单独的表
TableB.__table__.create(db.session.bind, checkfirst=True)
该表是在默认绑定中创建的,而不是在other_schema中创建的。
我这里缺什么了吗?如何修复它,以便在其他模式中创建它。
您需要为create
函数提供正确的引擎。可以通过以下方式检索正确的绑定:
from sqlalchemy.orm import object_mapper
TableB.__table__.create(db.session().get_bind(object_mapper(TableB())), checkfirst=True)
对于PG,至少我是这样做的:
class TableB(db.Model):
__table_args__ = {"schema":"schema_name"}