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

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하여 데이터베이스의 현재 상태가 모든 마이그레이션의 응용 프로그램을 나타냄을 나타낼 수 있습니다 .


답변

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

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


답변

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

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


답변

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

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.


답변

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

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

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


답변

$ 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/ 문서에서 자세한 정보를 찾을 수 있습니다.


답변

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

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

이제 해결되었습니다!