zilevsky
@zilevsky

Как применить include_name (alembic) для миграции отдельной таблицы?

Не могу понять как применить опцию include_name у alembic для sqlalchemy

Как я понял её можно использовать для обновления конкретных таблиц что мне и нужно.
Суть следующая. У меня есть несколько таблиц и я добавил в них пару новых полей, но обновить нужно пока только одну таблицу.
Если запускать алембик в стандартном режиме типа

alembic revision --autogenerate -m "Comment"

То он генерирует миграцию для всех таблиц.

В документации есть опция которая вроде как позволяет указать нужные таблицы для обновления, но не понимаю как её применить
https://alembic.sqlalchemy.org/en/latest/api/runti...

К примеру есть следующие таблицы и мне нужно создать миграцию только для таблицы User

class User(Base):
    __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'))
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
zilevsky
@zilevsky Автор вопроса
Решение
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"}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы