migrations fix
This commit is contained in:
@@ -21,26 +21,19 @@ depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Upgrade schema."""
|
||||
# Для SQLite: создаём новую таблицу, копируем данные, удаляем старую, переименовываем новую
|
||||
# Для SQLite: добавляем столбцы через ALTER TABLE
|
||||
conn = op.get_bind()
|
||||
# 1. Создать новую таблицу
|
||||
op.create_table(
|
||||
'channels_new',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('name', sa.String(length=255), nullable=True),
|
||||
sa.Column('link', sa.String(length=255), nullable=True),
|
||||
sa.Column('admin_id', sa.Integer(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
# 2. Если старая таблица есть, скопировать данные
|
||||
result = conn.execute(sa.text("SELECT name FROM sqlite_master WHERE type='table' AND name='channels'")).fetchone()
|
||||
if result:
|
||||
conn.execute(sa.text("INSERT INTO channels_new (id, name, link, admin_id) SELECT id, name, link, admin_id FROM channels"))
|
||||
op.drop_table('channels')
|
||||
# 3. Переименовать новую таблицу
|
||||
conn.execute(sa.text("ALTER TABLE channels_new RENAME TO channels"))
|
||||
# Добавить столбец link, если его нет
|
||||
result = conn.execute(sa.text("PRAGMA table_info(channels)")).fetchall()
|
||||
columns = [row[1] for row in result]
|
||||
if 'link' not in columns:
|
||||
conn.execute(sa.text("ALTER TABLE channels ADD COLUMN link VARCHAR(255)"))
|
||||
# Добавить столбец admin_id, если его нет
|
||||
if 'admin_id' not in columns:
|
||||
conn.execute(sa.text("ALTER TABLE channels ADD COLUMN admin_id INTEGER"))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Downgrade schema."""
|
||||
# SQLite не поддерживает удаление столбцов, поэтому просто удаляем таблицу
|
||||
op.drop_table('channels')
|
||||
|
||||
Reference in New Issue
Block a user