티스토리 뷰
목차
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)
'Python' 카테고리의 다른 글
[Python] 객체와 클래스 (0) | 2021.07.19 |
---|---|
[Python] secrets 라이브러리 : Generate secure random number (0) | 2021.07.17 |
[Python] 함수 (Function) (1) | 2021.07.16 |
[Python/Flask] Socket으로 모니터 스크린 공유 (0) | 2021.07.15 |
[Python/Flask] HTTP POST 방식으로 모니터 스크린 공유 (0) | 2021.07.15 |