2013-05-16 33 views
13

Tôi có bảng 'kiểm tra' có cột 'Tên' không có ràng buộc. Tôi cần phải Thay đổi cột này bằng cách cho ràng buộc 'duy nhất'. Tôi nên làm như thế nào?Alembic: Cách thêm ràng buộc duy nhất vào cột hiện tại

Tôi có nên sử dụng op.alter_column ('???') hoặc create_unique_constraint ('???') không? Không phải là create_unique_constraint cho cột mới chứ không phải cho cột hiện tại?

Trả lời

21

Để thêm, bạn cần: 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')

Để thả, bạn cần: http://alembic.zzzcomputing.com/en/latest/ops.html#alembic.operations.Operations.drop_constraint

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

+1

Bắt phép từ chối từ các liên kết này. Câu trả lời phải chứa các ví dụ mã, không trỏ trực tiếp đến các liên kết (mặc dù bạn có thể muốn trích dẫn chúng ở dưới cùng hoặc dưới dạng "tìm hiểu thêm") – Alvaro

+1

Các liên kết bị hỏng. Tôi nghĩ rằng nó sẽ không có được một câu trả lời lâu anyway như vậy, tôi đoán nó cần phải có được trả lời ở đây chính nó. Liên kết tới tài liệu sẽ là một dấu cộng –

+2

cho người đọc trong tương lai, mã ví dụ là: 'từ alembic import op' tạo -' op.create_unique_constraint ("uq_user_name", "user", ["name"]) ' drop - 'op.drop_constraint ('uq_user_name', 'user')' – idog

-1

Kể từ khi các liên kết trong câu trả lời trước không công việc dài hơn, đây là câu trả lời công việc:

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

Docs về op.create_index

Docs về op.drop_index

+0

Có thể áp dụng một ràng buộc mà không làm rơi và tái tạo các chỉ mục như thế này. –

Các vấn đề liên quan