2017-03-24 14 views
3

이이 일련의 사건이며,alembic/flask-migrate를 사용하여 기존 데이터베이스를 이전하지 않은 경우 어떻게 추가합니까?

  • 일 0 일어나고 : 내가 개발
  • 은 1 일 내 응용 프로그램을 배포 : 나는
  • 3 일 새 데이터베이스를 만들 : 내가 싶었 실현 내 기존 테이블에 새 행을 추가하십시오. 플라스크 - 마이그레이션을 발견했으며 데이터베이스를 마이그레이션하는 데이 데이터베이스를 사용하고 싶습니다.

현재 나는 일에 오전 3

방금 ​​flask db init, flask db migrateflask db upgrade 전화 일 0부터 시작하는 경우 플라스크-마이그레이션 실행을하는 방법에 대한 문서화의 많음이있다.

그러나 내 경우에는 조금 다릅니다. 명령을 실행했고 마이그레이션의 첫 번째 버전은 입니다. 그런 다음 데이터베이스 스키마를 수정하고 새로운 마이그레이션을 생성했습니다. 이제 나의 최신 이주는 표에 새 행을 추가하는 1 행의 마이그레이션 만 있습니다.

내 마이그레이션 중 누구도 당신은 내가 복제한다면 하루 1

에 플라스크-마이그레이션 시작하면 나타나는 첫 번째 마이그레이션 있어야하는 데이터베이스를 만들 수있는 실제 스키마가없는 것을 깨달았 내 레포 처음부터 :

flask db migratealembic.util.exc.CommandError: Target database is not up to date.이됩니다.

flask db upgradesqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "offer" does not exist이됩니다.

이 문제를 해결하려면 어떻게해야합니까?

답변

6

두 가지 옵션이 있습니다.

1) 만 마이그레이션 저장소를 만들려면 앞으로

  • 실행 flask db init가는 데이터베이스 마이그레이션을 추적합니다.
  • 데이터베이스 모델에 새 열을 추가하십시오.
  • 실행 flask db migrate을 실행하여 마이그레이션을 생성하십시오. 이주 스크립트에는 새 컬럼 만 있습니다.
  • flask db upgrade을 실행하여 데이터베이스로 새 마이그레이션을 적용하십시오.

이 시점에서 데이터베이스에 새 열이 있어야하며 작업을 계속할 수 있습니다. 추가 변경이 필요할 때마다 위의 단계를 반복하십시오.

이 방법을 사용하면 전체 데이터베이스를 처음부터 다시 만들 수 없습니다. 당신은 Day 1에서 가지고 있던 스키마로 데이터베이스를 초기화하는 방법을 가지고 있어야하고, 마이그레이션 히스토리를 적용하여 현재 스키마로 업그레이드 할 수 있습니다.

2) Flask를 추가하는 날의 스키마를 포함하여 전체 이전 기록을 추적하려면 응용 프로그램에 마이그레이션하십시오.

이것은 약간 까다 롭지 만 수행 할 수 있습니다.

  • 마이그레이션 저장소를 만들려면 flask db init으로 시작하십시오.
  • 다음으로, 데이터베이스가 비어 있다고 생각하여 Flask-Migrate를 속일 필요가 있습니다. 실제 db의 이름을 변경하고 테이블이없는 동일한 이름의 새 db를 작성하여이 작업을 수행 할 수 있습니다. 그 상태에서 flask db migrate을 실행하십시오. 이렇게하면 데이터베이스의 전체 스키마가 포함 된 마이그레이션이 생성됩니다.
  • 일단 초기 마이그레이션이 완료되면 데이터베이스를 올바른 상태로 복원하십시오.
  • flask db stamp head을 실행하여 데이터베이스를 업데이트 됨으로 표시합니다.
  • 데이터베이스 모델에 새 열을 추가하십시오.
  • 다시 flask db migrate을 실행하여 두 번째 마이그레이션을 생성하십시오. 이주 스크립트에는 새 컬럼 만 있습니다.
  • flask db upgrade을 실행하여 데이터베이스로 새 마이그레이션을 적용하십시오.

희망이 있습니다.

+0

두 번째 'flask db migrate'를 실행하면'alembic.util.exc.CommandError : 대상 데이터베이스가 최신이 아닙니다 .'라는 메시지가 나타납니다. 데이터베이스를 최신 버전으로 업데이트하려면 먼저 장고 가짜 마이그레이션과 같은 작업이 필요합니까? –

+1

당신이 맞습니다. 나는이 지침에서 한 걸음도 놓쳤습니다. 나는'db stamp head' 명령을 추가하여 게시물을 수정했습니다. – Miguel

+0

많은 감사합니다! 그것은 나를 위해 모든 것을 정리했다. –