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


104

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

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

감사

답변:


109

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


72

이것은 나를 위해 일했습니다

$ flask db stamp head
$ flask db migrate
$ flask db upgrade

39

내 공부는이 질문과 같습니다. "./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)

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


매력처럼 작동합니다! 이것이이 문제를 관리하는 가장 좋은 방법이라고 생각합니다!
— attaboyabhipro

여기도 마찬가지입니다! 원활하게 작동했습니다. 나는 그것이 db heads와 current와 관련이 있다는 것을 알았지 만 "stamp"명령이 있다는 것을 몰랐다. 감사!
— Subspacian

13

이것은 여러 가지 방법으로 해결할 수 있습니다.

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

문제가 계속되면 다음 명령을 시도하십시오.

$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate     # To detect automatically all the changes.
$ flask db upgrade     # To apply all the changes.

9

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

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

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


지금은 조금 오래되었지만 테이블이 Base에서 상속됩니까? 동일한 문제가 발생했으며 새 테이블이 Base가있는 Base에서 상속되지 않았고 Base = declarative_base() 기억 하기 때문에 자동 마이그레이션이 변경 사항을 선택하지 못했습니다.from sqlalchemy.ext.declarative import declarative_base

7
$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate  # To detect automatically all the changes.
$ flask db upgrade  # To apply all the changes.

https://flask-migrate.readthedocs.io/en/latest/ 문서에서 자세한 정보를 찾을 수 있습니다.


2

나는 너무 다른 머리를 만났고 필드 중 하나를 문자열에서 정수로 변경하고 싶었으므로 먼저 실행하십시오.

$ flask db stamp head # to make the current the same
$ flask db migrate
$ flask db upgrade

이제 해결되었습니다!


1

저와 마찬가지로 방금 새 프로젝트를 시작했고 메모리 내 SQLite 데이터베이스 ( sqlite:///:memory:)를 사용하는 경우에도 이런 일이 발생할 수 있습니다 . 이러한 데이터베이스에 마이그레이션을 적용하면 다음 번에 개정 자동 생성이라고 말하고 싶을 때 데이터베이스는 여전히 원래 상태 (비어 있음)이므로 대상 데이터베이스가 데이트. 해결책은 영구 데이터베이스로 전환하는 것입니다.


0

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



-6

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

flask db migrate

과

flask db upgrade
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.