flask script, alembic 사용법 - nl-seoultech/tento-server GitHub Wiki

tento-server 에 경우는 제가 먼저 짜놓은 flask-foil 을 이용해서 기본셋팅을 해놓을건데요. alembic의 명령어나 flask-script의 명령어를 manager.py에 다 만들어놨기때문에 사용하시면됩니다. 먼저 생성되어있는 exam.cfg.pydev.cfg.py나 다른 적당한 이름으로 복사합니다.

$ cp exam.cfg.py dev.cfg.py

설정파일의 설정중 ALEMBIC_SCRIPT_LOCATION를 바꿔야하는데요 프로젝트에 있는 migrations 디렉토리 위치를 적어주면됩니다.

$ pwd
/Users/hyojun/src/tento-server/tento
$ cat dev.cfg.py
...
ALEMBIC_SCRIPT_LOCATION = '/Users/hyojun/src/tento-server/tento/migrations/'
...

주의하실점은 마지막이 /로 끝나야된다는거정도입니다. 설정이 다끝나면 명령어 실행을하면됩니다.

$ python manager.py -c [config-file] [command]

인데요. 존재하는 명령어는

  • runserver
  • shell
  • downgrade
  • upgrade
  • revision
  • current
  • branch
  • history

입니다.

flask-script가 제공하는 명령어

$ python manager.py -c dev.cfg.py runserver

를 하면 서버가 켜집니다. -h 옵션으로 host를 설정할수있고, -p옵션으로 포트를 설정할수있습니다.

$ python manager.py -c dev.cfg.py runserver -h admire.kr -p 1234

다른 옵션들은 --help 옵션으로 확인할수있습니다

$ python manager.py -c dev.cfg.py runserver --help

flask-script에선 우리가 만든 flask 앱의 환경을 바로 쉘에서 확인할수있도록 shell 명령어도 제공합니다.

$ python manager.py -c dev.cfg.py shell
>>>

생긴건 기본 python shell이랑 똑같이 생겼지만 우리 flask 앱의 context가 포함되어있는 쉘이라 유용하게사용할수있습니다.

>>> with app.test_client() as c:
...     c.get(url_for('users.hello_world'))

shell 명령어에 관해선 나중에 사용하면서 같이 보도록하겠습니다.

alembic 에서 제공하는 명령어

alembic은 sqlalchemy를 위한 마이그레이션 툴입니다. 스키마의 변경, 테이블의 추가, 변경, 삭제 등을 손쉽게 버전관리하듯이 관리할수있습니다.

$ alembic init

로 시작할수있는데, 이렇게되면 alembic.ini가 생겨버리기때문에 설정파일을 dev.cfg.py 같이 한파일로 묶어버리기위해서 manager.py에 명령어를 전부 구현해놓았습니다. 스키마의 어떤 변경점이 있다면, revision을 생성하면됩니다.

$ python manager.py -c dev.cfg.py revision -m "Add user tables"
 --autogenerated [y]

이렇게하면 /root-dir/tento/migrations/version/에 마이그레이션 스크립트가 자동으로 생성됩니다. upgrade 함수는 마이그레이션 버전이 올라갈때 사용되는 함수고, downgrade는 버전을 낮출때 사용하는 함수입니다. revision이 생성되면 upgrade명령으로 가장 최신 버전(head)로 revision의 상태를 올릴수있습니다.

$ python manager.py -c dev.cfg.py upgrade

만약 버전을 낮추고싶다면 downgrade 명령어를 사용하면됩니다.

$ python manager.py -c dev.cfg.py downgrade

이렇게 생성된 revision들을 전부다 보고싶다면, history명령어로 확인하면됩니다.

$ python manager.py -c dev.cfg.py history

현재 revision을 확인하기위해선 current명령어로 확인하면됩니다.

$ python manager.py -c dev.cfg.py current