티스토리 뷰

Python

[Python/Flask] DB 제어 명령어

ellie.strong 2021. 7. 17. 22:38
728x90

목차

    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)

     

    728x90
    댓글
    공지사항
    최근에 올라온 글