2013-05-16 9 views
13

Mam tabelę "test" o kolumnie "Nazwa" bez ograniczeń. Potrzebuję do Alter tej kolumny, nadając jej "unikalny" przymus. Jak mam to zrobić?Alembic: Jak dodać unikalne ograniczenie do istniejącej kolumny

Czy powinienem użyć kolumny op.alter ("???") lub create_unique_constraint ("???")? Czy nie jest create_unique_constraint dla nowej kolumny, a nie dla istniejącej?

Odpowiedz

21

Aby dodać, że trzeba: http://alembic.zzzcomputing.com/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')

Aby wykluczyć, że trzeba: http://alembic.zzzcomputing.com/en/latest/ops.html#alembic.operations.Operations.drop_constraint

op.drop_constraint('uq_user_name', 'user', schema='my_schema')

+1

Uzyskiwanie uprawnień do zapisu z tych linków. Odpowiedzi powinny zawierać przykłady kodu, a nie wskazywać bezpośrednio na linki (chociaż możesz je cytować na dole lub jako "dowiedz się więcej"). – Alvaro

+1

Linki są zepsute. Myślę, że i tak nie byłaby to długa odpowiedź, więc sądzę, że powinna tu być udzielona odpowiedź. Odsyłacz do dokumentów byłby dodatkowym numerem –

+2

dla przyszłych czytelników. Kod przykładów to: 'from alembic import op' create -' op.create_unique_constraint ("uq_user_name", "user", ["name"]) ' drop - 'op.drop_constraint ('uq_user_name', 'user')' – idog

-1

Ponieważ łączy w poprzedniej odpowiedzi nie dłuższa praca, oto działa odpowiedź:

 
"""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') 

Dokumenty dotyczące op.create_index

Dokumenty dotyczące op.drop_index

+0

Możliwe jest zastosowanie ograniczenia bez upuszczania i ponownego tworzenia indeksów w ten sposób. –

Powiązane problemy