2017-03-20 5 views
1

나는 데이터베이스에서 Alembic 마이그레이션을 사용하여 여러 테이블을 만들었으며 각 테이블에는 하나의 인덱스와 하나 또는 두 개의 외래 키가 있습니다.Alembic 다운 그레이드에서 외래 키를 삭제 하시겠습니까?

내 업그레이드 방법이 올바르게 작동하여 테이블을 실행하고 만듭니다.

인덱스를 삭제 한 다음 테이블을 삭제 한 후에 내 다운 그레이드 메소드가 실패합니다. 나는 외계인 키를 먼저 놓아야한다고 생각한다. 그러나 나는 Alembic 문서에서 외래 키를 삭제하는 방법을 알 수 없다.

다운 그레이드 방법 :

def downgrade(): 
    # Drop Indexes 
    op.drop_index('ix_charge_id') 
    op.drop_index('ix_statutory_provision_id') 
    op.drop_index('ix_originating_authority_id') 

    # Drop Tables 
    op.drop_table('charge') 
    op.drop_table('statutory_provision') 
    op.drop_table('originating_authority') 

이 세 개의 테이블의 각 외래 키를 가지고, 그래서이 처음 낙하에 대해 어떻게 가야합니까?

TYIA.

+0

외래 키 제약 조건을 삭제하려면 [drop_constraint] (http://alembic.zzzcomputing.com/en/latest/ops.html#alembic.operations.Operations.drop_constraint)를 사용하십시오. –

답변

3

드롭 억제를 호출하면됩니다. 그래서 업그레이드 방법에 당신은 할 수있는 다음 :

op.create_foreign_key(u'my_fkey', 'table1', 'table2', ['table2_id'], ['id']) 

그런 다음 다운 그레이드 방법 당신은 당신이를 만들 때 이름을 지정한다는 것입니다을 감시하는

op.drop_constraint(u'my_fkey', 'table1', type_='foreignkey') 

한 가지가 필요합니다 외래 키 또는 데이터베이스에서 사용되는 명명 규칙을 정확하게 알고 있어야합니다. 제한 조건을 제거 할 때 사용되는 정확한 이름을 지정해야합니다.

시간을 절약하고 도움이 될 수있는 마지막 것은 alembic의 자동 개정 기능을 사용하는 것입니다. 나는 이것으로 무거운 짐을 많이 덜어 준다는 것을 알았고, 필요하다면 나는 스크립트를 조정할 수있다.

alembic revision --autogenerate -m <message> 

자동 생성에 대한 자세한 내용은 밖으로 http://alembic.zzzcomputing.com/en/latest/autogenerate.html 확인하지만, 정말 시간을 절약 할 수 있습니다.