Как применить include_name (alembic) для миграции отдельной таблицы?
Не могу понять как применить опцию include_name у alembic для sqlalchemy
Как я понял её можно использовать для обновления конкретных таблиц что мне и нужно. Суть следующая. У меня есть несколько таблиц и я добавил в них пару новых полей, но обновить нужно пока только одну таблицу. Если запускать алембик в стандартном режиме типа
alembic revision --autogenerate -m "Comment"
То он генерирует миграцию для всех таблиц.
В документации есть опция которая вроде как позволяет указать нужные таблицы для обновления, но не понимаю как её применить https://alembic.sqlalchemy.org/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params.include_name
К примеру есть следующие таблицы и мне нужно создать миграцию только для таблицы User
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
nickname = Column(String)
activity = Boolean(default=False) # Новое поле которое нужно учесть в миграции
class Article(Base): # Не учитывать эту таблицу при новой миграции
__tablename__ = 'articles'
id = Column(Integer)
title = Column(String)
text = Column(String)
user_id = Column(Integer, ForeignKey('user.id'))```
Ответы (1 шт):
Решение
In alembic/env.py or migrations/env.py:
def include_object(object, name, type_, reflected, compare_to):
if (type_ == "table" and object.schema == "exclude_from_migrations"):
return False
else:
return True
def run_migrations_online():
....
context.configure(connection=connection,
target_metadata=target_metadata,
include_object = include_object,
process_revision_directives=process_revision_directives,
**current_app.extensions['migrate'].configure_args)
...
В таблицах
class MyClass(db.Model):
__tablename__='my_class'
__table_args__ = {"schema": "exclude_from_migrations"}