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


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.