В моем приложении флэша есть одна база данных (db1), теперь я привязываю к ней новую базу данных (db2), у обоих есть 10 таблиц.alembic autogenerate получить метаданные для привязки Flask-SQLAlchemy
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://[email protected]:3306/db1'
SQLALCHEMY_BINDS = {
'test': 'mysql+pymysql://[email protected]: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 для автоматического обнаружения и генерации миграций для дб 1 и db2 отдельно, но db.metadata
получите все таблицы метаданных, но как только получить метаданные дб привязки?
Thanks @davidism help! Я могу использовать 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
)
Спасибо за помощь! – pangpang
, потому что мы используем 'alembic' для миграции, и мы хотим использовать функцию автогенерации alembic для каждого db, но' db.metadata' содержит все объекты таблиц. – pangpang
Вы можете использовать функцию, которая исключает объекты, принадлежащие таблице, с ключом привязки: http://alembic.readthedocs.org/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params .include_object – davidism