Как создать автоматически сгенерированный файл из последней ревизии в Alembic
Я следую этому уроку... и первоначальная автоматическая генерация идеальна... он в основном создает файл миграции с методами апгрейда и понижения.
скажем так, это номер версии файла миграции: 3e96cf22770b
.. все мои заявления об обновлении выглядят так:
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('hashtag',
sa.Column('id', sa.VARCHAR(), autoincrement=False, nullable=False),
sa.Column('text', sa.VARCHAR(), autoincrement=False, nullable=True),
sa.PrimaryKeyConstraint('id', name=u'hashtag_pkey')
)
и мое заявление о понижении рейтинга выглядит следующим образом:
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_table('user_access_token')
Теперь я сделал простую модификацию моего файла models.py, вот как он выглядит в git:
- verificationCode = Column(String())
+ isVerified = Column(Boolean())
Дело в том, что я понятия не имею, как запустить оператор автогенерации, который на самом деле просто дает мне файл дельта- миграции... т.е. я просто хочу файл миграции, который заменяет один столбец другим...
я попытался установить текущую версию 3e96cf22770b
затем работает
python migrate.py db revision --autogenerate
но затем он продолжает создавать дубликаты исходного файла миграции (то есть переносить всю схему базы данных), а не только дельта.. идеи?
2 ответа
Alembic автоматически генерирует скрипт миграции (используя --autogenerate
флаг), наблюдая текущую схему БД (она фактически соединяет БД и выбирает схему) и новую модель (в вашем коде Python). Поэтому, когда вы хотите создать новый сценарий миграции, убедитесь, что ваша база данных находится в предыдущей схеме (3e96cf22770b
в твоем случае).
Не уверен, как вы пытались установить текущую схему, но вы можете проверить схему в alembic_version
таблица в вашей БД.
Вы должны быть в состоянии запустить:
python migrate.py db migrate
и это должно создать новый файл миграции для вас. Как только вы получите, что вы можете запустить:
python migrate.py db upgrade
и это обновит вашу базу данных. Перед обновлением базы данных посмотрите файл миграции и посмотрите, выполняет ли он то, что вы хотите.