Диалект базы данных включен в сценарий понижения Alembi c, но не в сценарий обновления? - PullRequest
0 голосов
/ 03 апреля 2020

Я использую alembi c для генерации сценариев миграции базы данных для базы данных mysql. Я заметил, что синтаксис сгенерированных сценариев обновления и понижения немного отличается, тогда как я думал, что они в основном будут одинаковыми.

models.py - до

class Message_User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=True)

models.py - после модификации таблицы

class Message_User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tag = db.Column(db.String(15), nullable=True)

файл миграции - оригинал - показывает создание таблицы

def upgrade():
    op.create_table('message_user',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=20), nullable=True)
    sa.PrimaryKeyConstraint('id', name=op.f('pk_message_user'))
    )

def downgrade():
    op.drop_table('message_user')

файл миграции - после - показывает изменение таблицы

def upgrade():
    op.add_column('message_user', sa.Column('tag', sa.String(length=15), nullable=True))
    op.drop_column('message_user', 'name')

def downgrade():
    op.add_column('message_user', sa.Column('name', mysql.VARCHAR(collation='utf8_bin', 
    length=20), nullable=True))
    op.drop_column('message_user', 'tag')

Сценарии обновления описывают изменения чисто в терминах sqlalchemy, тогда как сценарии понижения добавляют mysql диалект, определяющий c изменения. В частности, сценарий обновления определяет тип как sa.String (length = 15), тогда как версия понижающего рейтинга определяет его как mysql .VARCHAR (collation = 'utf8_bin', length = 20). В операторах создания таблиц в сценариях перехода на более ранние версии автоматически созданный сценарий также включает mysql_collate, mysql_default_charset и mysql_engine, в то время как их нет в инструкциях создания таблиц для сценариев обновления. Я не видел никаких упоминаний об этом в документации alembi c. Кто-нибудь знает, почему это отличается?

...