Alembic: Как добавить уникальное ограничение в существующий столбец
У меня есть таблица "test", имеющая столбец "Name" без ограничений. Мне нужно ALTER
этот столбец, дав ему UNIQUE
ограничение. Как я должен это делать?
Должен ли я использовать op.alter_column('???')
или create_unique_constraint('???')
? Разве create_unique_constraint не для нового столбца, а не для существующего?
Ответы
Ответ 1
Для добавления вам потребуется: https://alembic.sqlalchemy.org/en/latest/ops.html#alembic.operations.Operations.create_unique_constraint
from alembic import op
op.create_unique_constraint('uq_user_name', 'user', ['name'], schema='my_schema')
Чтобы удалить, вам нужно: https://alembic.sqlalchemy.org/en/latest/ops.html#alembic.operations.Operations.drop_constraint
op.drop_constraint('uq_user_name', 'user', schema='my_schema')
Ответ 2
Вот рабочий ответ:
"""Make domain column unique
Revision ID: 9cb14e885b40
Revises: 76c9f6e094e2
Create Date: 2016-07-14 15:54:19.300574
"""
# revision identifiers, used by Alembic.
revision = '9cb14e885b40'
down_revision = '76c9f6e094e2'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
# Applies a unique constraint on the 'instances' table for the column 'domain'
op.create_index('instances_domain_unique', 'instances', ['domain'], unique=True)
def downgrade():
# drops the unique constraint named 'instances_domain_unique'
op.drop_index('instances_domain_unique')
Документы относительно op.create_index
Документы относительно op.drop_index