Published on

Flask-SQLAlchemy 익스텐션

Authors

Flask-SQLAlchemy는 Flask 애플리케이션에 SQLAlchemy을 쉽게 사용할 수 있도록 한 Flask 익스텐션이다. 세션, 모델, 엔진과 같은 객체를 사용해 흔히 사용되는 객체와 패턴을 세팅해주어 빠르고 간편하게 Flask에서 SQLAlchemy를 사용할 수 있다.

Caution

Flask-SQLAlchemy를 사용한다 해서 SQLAlchemy가 동작하는 방식이 변경되지 않으니 SQLAlchemy에 문제가 있다면 SQLAlchemy를 살펴보아야 한다.

Flask Application Context

Flask-SQLAlchemy는 SQLAlchemy뿐만 아니라 Flask 애플리케이션에도 의존성을 갖는다. 그렇기 때문에, 애플리케이션 컨텍스트가 활성화되지 않은 상황에서 Flask-SQLAlchemy를 통해 데이터베이스에 접근하려 하면 다음과 같은 에러가 발생한다. 예를 들면, 멀티쓰레딩을 통해 데이터를 병렬로 넣어주거나 Flask 애플리케이션이 없는 테스트 환경에서 마주할 수 있는 문제이다.

RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.

이렇게 Flask 애플리케이션 밖에서 Flask-SQLAlchemy를 통해 데이터베이스를 접근해야 한다면, 직접 애플리케이션 컨텍스트를 주입해줘야 한다.

def test_user_model(app):
    user = User()

    with app.app_context():
        db.session.add(user)
        db.session.commit()

참고 자료