diff --git a/alembic/versions/7506a3320699_channel_table.py b/alembic/versions/7506a3320699_channel_table.py index bc27d49..57a3a89 100644 --- a/alembic/versions/7506a3320699_channel_table.py +++ b/alembic/versions/7506a3320699_channel_table.py @@ -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')