使用绑定时使用Flask SQLAlchemy创建一个表



我正在尝试在烧瓶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"}

最新更新