[flask] flask_scripts, manage.py로 db 관리 하기

깨미·2021년 7월 15일
0

Flask

목록 보기
1/9
post-thumbnail
post-custom-banner

flask_scripts
웹 모듈 밖에서 스크립트를 관리해주는 라이브러리.

기능

  • 개발 서버 실행
  • 파이썬 쉘
  • db 세팅을 위한 스크립트 작성
    (나는 db 세팅을 위해 주로 사용)

flask의 manage.py에서 많이 쓰임.

파이썬 모듈 생성

스크립트 명령을 실행하기 위해 가장 먼저 파이썬 모듈을 생성한다. 이름은 주로 manage.py로 짓는다.
manage.py 에서는 flask_script의 Manager class의 instance를 만들어 사용한다.
Manager class는 모든 명령을 관리하고, command line에서 어떻게 호출될지를 관리한다.

예시

# manage.py
from flask_script import Manager

from backend import app

manager = Manager(app)

@manager.command
def hello():
    print "hello"
    
if __name__ == '__main__':
    manager.run()    

명령 추가 방법

  • Command class 상속
  • @command decorator 사용
  • @option decorator 사용

manager.run()은 Manager instance가 command line의 입력에 반응하도록 대기시킴.

cmd에서 사용

python manage.py hello
> hello

실제 사용

나는 db를 다룰 때 사용하기 때문에 추가로 flask_migrate 의 MigrateCommand class도 사용하였다.

flask_migrate
Flask 애플리케이션에 대한 SQLAlchemy db migration을 처리(테이블 생성이나 컬럼 추가 같은 !)하는 확장 기능을 가진다.

적용

#manage.py

from flask_migrate import MigrateCommand
from flask_script import Manager

manager = Manager(app)
manager.add_command('db', MigrateCommand)

@manager.command 
def init_db(): 
    if check_message('Are you sure to init database ? (Y/n)') == False:
        return
    """Initialize database."""
    with app.app_context(): # application context 획득.
        DBManager.init_db() # 요청 context가 들어오고, app conext를 명시적으로 설정하였다면 backend_model database.py init_db 실행

if __name__ == '__main__':
    manager.run()        
        
#cmd
python manage.py init_db 
> Are you sure to init database ? (Y/n) Y

Reference
https://livlikwav.github.io/flask/Flask-script/

profile
vis ta vie
post-custom-banner

0개의 댓글