我的烧瓶应用程序之前有一个数据库(db1),现在我绑定了一个新的数据库(db2),它们都有10个表。
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root@localhost:3306/db1'
SQLALCHEMY_BINDS = {
'test': 'mysql+pymysql://root@localhost:3306/db2'
}
db = SQLAlchemy()
class table1(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
.......
class table10(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
class table11(db.Model):
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
......
class table20(db.Model):
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
我想使用alembic autogenerate函数分别自动检测和生成db 1和db2的迁移,但db.metadata
将获取所有表元数据,但是如何获取绑定db元数据?
谢谢@davidism的帮助!我可以使用include_symbol来实现它。
def include_symbol(tablename, schema):
return tablename in ('table1', 'table2'.......'table10') # for db1
# return tablename not in ('table1', 'table2'.......'table10') # for db2
with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
include_symbol=include_symbol
)
答案 0 :(得分:1)
您不能,因为该功能尚不存在。目前,所有绑定中的所有模型都有一个元数据实例。只要所有模型都有唯一的名称,这不是一个大问题。
当我们应用this patch并发布新版本时,每个绑定都将拥有自己的元数据。然后,您可以使用db.get_metadata(bind='db2')
访问它。