IT이야기

대상 데이터베이스가 최신 상태가 아닙니다.

cyworld 2021. 4. 5. 21:12
반응형

대상 데이터베이스가 최신 상태가 아닙니다.


Flask 앱을 ​​마이그레이션하고 싶습니다. 저는 Alembic을 사용하고 있습니다.

그러나 다음과 같은 오류가 발생합니다.

Target database is not up to date.

온라인에서 이것과 관련이 있다고 읽었습니다. http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

불행히도 데이터베이스를 최신 상태로 유지하는 방법과 링크에 제공된 코드를 어디에 / 어떻게 작성해야하는지 잘 모르겠습니다. 마이그레이션 경험이 있으시면 설명해 주시겠습니까?

감사


수동으로 또는으로 마이그레이션을 만든 후를 사용하여 --autogenerate적용해야합니다 alembic upgrade head. db.create_all()셸에서 사용한 경우를 사용 alembic stamp head하여 데이터베이스의 현재 상태가 모든 마이그레이션의 응용 프로그램을 나타냄을 나타낼 수 있습니다 .


내 공부는이 질문과 같습니다. "./manage.py db migrate -m 'Add relationship'"을 실행하면 "alembic.util.exc.CommandError : 대상 데이터베이스가 최신 상태가 아닙니다."와 같은 오류가 발생합니다.

그래서 마이그레이션 상태를 확인했습니다.

(venv) ]#./manage.py db heads
d996b44eca57 (head)
(venv) ]#./manage.py db current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
715f79abbd75

머리와 전류가 다르다는 것을 발견했습니다!

이 단계를 수행하여 수정했습니다.

(venv)]#./manage.py db stamp heads
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running stamp_revision 715f79abbd75 -> d996b44eca57

그리고 이제 전류는 머리와 동일합니다.

(venv) ]#./manage.py db current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
d996b44eca57 (head)

이제 마이그레이션을 다시 수행 할 수 있습니다.


어떤 이유로 마이그레이션 파일 중 일부를 삭제해야했습니다. 이유가 확실하지 않습니다. 그러나 그것은 문제를 해결했습니다.

한 가지 문제는 데이터베이스가 모든 새 테이블 등으로 제대로 업데이트되지만 자동 마이그레이션을 사용할 때 마이그레이션 파일 자체에 변경 사항이 표시되지 않는다는 것입니다.

누군가가 더 나은 솔루션을 가지고 있다면 지금 내 솔루션이 일종의 해키이므로 알려주십시오.


이 오류를 수정하려면 최신 마이그레이션 파일 (python 파일)을 삭제 한 다음 새로 마이그레이션을 수행하십시오.


db upgrade 명령을 실행하기 전에 모든 테이블을 삭제하십시오.


이를 해결하기 위해 마이그레이션중인 테이블을 삭제 (삭제)하고 다음 명령을 실행합니다.

flask db migrate

flask db upgrade

참조 URL : https://stackoverflow.com/questions/17768940/target-database-is-not-up-to-date

반응형