Flask Migrate Target Database Is Not Up to Date
le récit de riri
[Python/Flask] DB 제어 명령어 본문
Python
[Python/Flask] DB 제어 명령어
ririhan 2021. 7. 17. 22:38
1. DB 초기화
📄 flask db init
(Flask) D:\flask\watchu_db\watchu_db>flask db init Creating directory D:\flask\watchu_db\watchu_db\migrations ... done Creating directory D:\flask\watchu_db\watchu_db\migrations\versions ... done Generating D:\flask\watchu_db\watchu_db\migrations\alembic.ini ... done Generating D:\flask\watchu_db\watchu_db\migrations\env.py ... done Generating D:\flask\watchu_db\watchu_db\migrations\README ... done Generating D:\flask\watchu_db\watchu_db\migrations\script.py.mako ... done Please edit configuration/connection/logging settings in 'D:\\flask\\watchu_db\\watchu_db\\migrations\\alembic .ini' before proceeding.
✔️ 데이터베이스를 관리하는 초기 파일들을 migrations라는 디렉터리에 자동으로 생성해준다.
이때 생성되는 파일들을 Flask-Migrate 라이브러리에서 사용하게 된다.
❌에러 ❌
(Flask) D:\flask\watchu_db>flask db init Usage: flask db init [OPTIONS] Try 'flask db init --help' for help. Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a " wsgi.py" or "app.py" module was not found in the current directory.
FLASK_APP 환경변수 가 설정돼 있지 않아 발생하는 에러이다.
아래와 같이 메인 어플리케이션이 있는 디렉터리로 이동 후, 환경변수를 설정해줘야한다.
(Flask) D:\flask\watchu_db> cd watchu_db (Flask) D:\flask\watchu_db\watchu_db> set FLASK_APP=__init__
2. DB 모델 생성 및 변경
📄 flask db migrate
(Flask) D:\flask\watchu_db\watchu_db>flask db migrate INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.autogenerate.compare] Detected added table 'professor' INFO [alembic.autogenerate.compare] Detected added table 'test_room' INFO [alembic.autogenerate.compare] Detected added table 'student' INFO [alembic.autogenerate.compare] Detected added table 'log' Generating D:\flask\watchu_db\watchu_db\migrations\versions\23faff93799d_.py ... done
✔️ 모델을 새로 생성하거나 변경 할 때 사용한다.
이 명령을 수행하면 데이터베이스 변경을 처리할 리비전(revision) 파일이 생성된다. - 이름은 무작위로 생성된다.
📄 flask db upgrade
(Flask) D:\flask\watchu_db\watchu_db>flask db upgrade INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 23faff93799d, empty message
✔️ 모델의 변경 내용을 실제 데이터베이스에 적용 할 때 사용한다.
❌ 에러 ❌
migrate은 성공했지만 upgrade를 실패할 경우 다시 migrate을 시도할 때도 에러가 발생한다.
(Flask) D:\flask\watchu_db\watchu_db>flask db migrate INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. ERROR [flask_migrate] Error: Target database is not up to date.
① flask db heads 명령으로 현재 migrate 작업의 최종 리비전을 확인한다.
(Flask) D:\flask\watchu_db\watchu_db>flask db heads 7b5139f2b9f5 (head)
② flask db current 명령으로 migrate 작업의 현재 리비전을 확인한다.
(Flask) D:\flask\watchu_db\watchu_db>flask db current INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. 68ee37e507e5
현재 시점의 리비전과 최종 리비전이 같지 않다. 이 둘이 일치해야 migrate 작업을 진행할 수 있다.
③ flask db stamp heads 명령으로 현재 리비전을 최종 리비전으로 변경한다.
(Flask) D:\flask\watchu_db\watchu_db>flask 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 68ee37e507e5 -> 7b5139f2b9f5
이제 mirage 작업을 진행 할 수 있게되었다!!
3. DB 살펴보기
✔️ SQLite GUI 도구인 DB Browser for SQLite 로 DB를 살펴볼 수 있다. (다운로드 링크)
우리가 생성한 데이터 베이스 인 watchu_db.db(SQLite 데이터베이스의 데이터 파일) 를 불러와 살펴볼 수 있다.
4. 모델 사용하기
📄 flask shell
(Flask) D:\flask\watchu_db\watchu_db>flask shell Python 3.8.10 (default, May 19 2021, 13:12:57) [MSC v.1916 64 bit (AMD64)] on win32 App: watchu_db [production] Instance: D:\flask\watchu_db\instance >>>
✔️ 플라스크 셸을 실행한다.
플라스크 셸은 플라스크를 실행하는 데 필요한 환경이 자동으로 설정되어 실행된다.
플라스크 셸을 종료하고 싶다면 "Use exit() or Ctrl-Z plus Return to exit" 이와 같은 명령어를 사용하면 된다.
ref.
- 2-04 모델로 데이터 처리하기 - 점프 투 플라스크 (wikidocs.net)
Flask Migrate Target Database Is Not Up to Date
Source: https://programmer-ririhan.tistory.com/222
0 Response to "Flask Migrate Target Database Is Not Up to Date"
Post a Comment