문제상황:
Flask 애플리케이션에서 데이터베이스에 쿼리를 보내려고 했으나, 아래와 같은 에러가 발생했습니다. 기본적인 Flask 애플리케이션 구조와 SQLAlchemy를 사용하여 User 모델을 생성하고 데이터베이스에 쿼리를 보내려고 했습니다.
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
db.create_all()
user = User(username='test_user', email='test@example.com')
db.session.add(user)
db.session.commit()
에러로그 내용:
RuntimeError: Working outside of application context
해결방법:
에러가 수정된 코드+ 수정된 부분에 대한 주석
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
# 수정된 부분: 애플리케이션 컨텍스트를 생성하는 함수
def create_user():
with app.app_context():
db.create_all()
user = User(username='test_user', email='test@example.com')
db.session.add(user)
db.session.commit()
create_user()
원인분석:
이 에러는 Flask 애플리케이션의 애플리케이션 컨텍스트(application context) 밖에서 작업을 시도했기 때문에 발생한 것입니다. Flask에서는 애플리케이션 컨텍스트 내에서 데이터베이스 작업을 수행해야 합니다.
해결 과정:
- 애플리케이션 컨텍스트를 생성하기 위해, with app.app_context(): 구문을 사용했습니다.
- 애플리케이션 컨텍스트 내에서 데이터베이스 작업을 수행하도록 코드를 수정했습니다.
이렇게 하면, "RuntimeError: Working outside of application context" 에러를 해결할 수 있습니다.
참고링크:
728x90