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

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel