2014-12-02 4 views
0

동일한 데이터베이스의 다른 버전에서 작동하도록 알레 빗 마이 그 레이션을 사용하려고합니다. 예를 들어, 라이브 데이터베이스와 테스트 데이터베이스라는 두 개의 데이터베이스가 있습니다. 각자 다른 이주 상태에있을 수 있습니다. 하나의 경우, 테스트 데이터베이스가 전혀 존재하지 않을 수도 있습니다.동일한 데이터베이스의 서로 다른 버전에서 작동하는 알렘 비 마이그레이션

라고 말하면 및 B 인 테이블 table1이 있습니다. 이제 열 C을 추가하고 싶습니다. 나는 C을 포함하는 내 모델을 변경하고 다음 코드

op.add_column('table1', sa.Column('C', sa.String(), nullable=True)) 

이 기존 live 데이터베이스와 잘 작동이있는 마이그레이션 스크립트를 생성합니다.

존재하지 않는 test 데이터베이스를 참조하여 alembic upgrade head을 호출하면 (Operational Error) duplicate column name... 오류가 발생합니다. 나는이 모델이 C 컬럼을 포함하고 있고 alembic/sqlalchemy가 존재하지 않을 경우 자동으로 전체 테이블을 생성한다고 가정합니다.

나는 단순히 오류를 잡아 두어야할까요? 더 좋은 방법이 있습니까?

내가 테스트 DB를 새로 만든 후 그 즉시 머리를 도장한다 제안

답변

0

command.stamp(configs_for_test_db, 'head') 

이 가서 실제로 있도록 마이그레이션을 실행하지 않고 적절한 증류기 테이블에 머리 개정 번호를 삽입합니다 개정 번호는 db의 상태를 반영합니다 (즉, 새로 작성된 db가 최신 wrt 마이그레이션 임). db가 스탬핑 된 후, alembic 업그레이드가 올바르게 작동해야합니다.