[python] Peewee와 Flask를 함께 사용하기

Peewee는 간단하고 가벼운 Python ORM(Object-relational mapping) 라이브러리입니다. Flask는 Python 웹 프레임워크로서, Peewee와 함께 사용하면 데이터베이스와 웹 애플리케이션을 손쉽게 개발할 수 있습니다.

이 글에서는 Peewee와 Flask를 함께 사용하는 방법을 알아보겠습니다.

시작하기 전에

먼저, Peewee와 Flask를 설치해야 합니다. 다음 명령을 사용하여 필요한 패키지를 설치할 수 있습니다.

pip install peewee flask

Peewee 모델 정의하기

데이터베이스와 상호 작용하기 위해 Peewee 모델을 정의해야 합니다. 예를 들어, 사용자(User) 모델을 다음과 같이 정의해보겠습니다.

from peewee import *

db = SqliteDatabase('my_app.db')

class User(Model):
    username = CharField()
    email = CharField()

    class Meta:
        database = db

위 코드에서 User 클래스는 Model 클래스를 상속받아 모델을 정의합니다. usernameemail은 사용자의 속성을 나타내는 필드입니다. Meta 클래스 내에서 database 속성을 통해 SQLite 데이터베이스를 사용한다고 지정했습니다.

Flask 애플리케이션과 연결하기

이제 Flask 애플리케이션과 Peewee 모델을 연결해보겠습니다. 다음과 같은 코드를 작성하여 Flask 애플리케이션과 데이터베이스를 설정할 수 있습니다.

from flask import Flask, jsonify

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

@app.before_request
def before_request():
    db.connect()

@app.after_request
def after_request(response):
    db.close()
    return response

위 코드에서 before_request 데코레이터를 사용하여 요청이 처리되기 전에 데이터베이스 연결을 수행합니다. after_request 데코레이터를 사용하여 요청이 처리된 후 데이터베이스 연결을 닫습니다. 이렇게 함으로써 각 요청마다 데이터베이스 연결과 닫기를 수동으로 관리할 필요가 없습니다.

라우트 생성하기

이제 Flask 애플리케이션에서 사용자(User)와 관련된 라우트를 생성해보겠습니다. 다음과 같은 코드를 작성하여 사용자 정보를 조회할 수 있는 라우트를 만듭니다.

@app.route('/users')
def get_users():
    users = User.select()
    return jsonify({'users': [user.username for user in users]})

위 코드에서 get_users 함수는 /users URL로 접근할 때 실행되는 라우트입니다. User.select()를 사용하여 사용자 정보를 조회하고, JSON 형식으로 응답합니다.

실행하기

Flask 애플리케이션을 실행해보겠습니다. 다음과 같이 코드를 추가하여 애플리케이션을 실행할 수 있습니다.

if __name__ == '__main__':
    db.create_tables([User])
    app.run()

db.create_tables([User])를 사용하여 데이터베이스에 테이블을 생성합니다. 그리고 app.run()을 사용하여 서버를 실행합니다.

이제 터미널에서 다음 명령을 실행하여 Flask 애플리케이션을 시작할 수 있습니다.

python app.py

결론

이제 Peewee와 Flask를 함께 사용하는 방법을 알게 되었습니다. Peewee를 사용하여 데이터베이스 모델을 정의하고, Flask와 결합하여 웹 애플리케이션을 개발할 수 있습니다. 이를 통해 데이터베이스와 웹 애플리케이션을 효율적으로 관리할 수 있습니다.

더 많은 정보를 원하신다면, Peewee 공식 문서Flask 공식 문서를 참고하시기 바랍니다.