【发布时间】:2016-06-15 16:24:34
【问题描述】:
我想将两个 MySQL 数据库添加到我的 Flask 应用程序中。不幸的是,这些数据库几乎完全相同。 它们具有相同的表名和列名,但数据不同。
我在 config.py 中使用 SQLALCHEMY_BINDS
SQLALCHEMY_BINDS = {
'old': 'mysql://[OLD_DB_HERE]',
'new': 'mysql://[NEW_DB_HERE]'
}
然后在我的models.py
class CallOld(db.Model):
__bind_key__ = 'old'
__table__ = db.Model.metadata.tables['ConferenceCall2']
class CallNew(db.Model):
__bind_key__ = 'new'
__table__ = db.Model.metadata.tables['ConferenceCall2']
问题是,当我为两个表调用查询时,我得到相同的结果。
例如,CallOld.query.with_entities(CallOld.TenantName.distinct()).all() 和 CallNew.query.with_entities(CallNew.TenantName.distinct()).all()
返回相同。
有趣的是,输出总是来自两个模型类中的第二个。显然第二类(在这种情况下为CallNew)会覆盖第一类(CallOld)。
如何将相同的表定义附加到具有不同绑定的两个模型?
【问题讨论】:
-
stackoverflow.com/questions/7877196/…,您是否有理由尝试使用相同的
Table对象,即使这些模型适用于不同的数据库。使用 mixin 可能会立即解决这个问题。 -
这些数据库已经存在,我只需要将我的 Flask 应用程序连接到它们。第一个是旧的,第二个是新的。但是它们的结构和表名是相同的。这就是为什么我使用相同的表名。无论如何我都会检查mixin。希望这能帮助我解决问题。
标签: python flask sqlalchemy flask-sqlalchemy