Flask

Chapter 3-12 Flask 개념 정리

Chansman 2025. 4. 21. 11:15

📌 개념 정리

3-12. 정리

1️⃣ Flask-SQLAlchemy 설정

먼저, Flask 애플리케이션에 Flask-SQLAlchemy를 설정합니다. 이를 위해 SQLAlchemy 객체를 생성하고 Flask 앱과 연결합니다.

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# Flask 애플리케이션 생성
app = Flask(__name__)

# 데이터베이스 URI 설정
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///yourdatabase.db'  # 여기서 데이터베이스 URI 설정

# SQLAlchemy 객체 생성 및 Flask 앱과 연결
db = SQLAlchemy(app)
  • SQLAlchemy 객체를 생성하여 Flask 애플리케이션에 연결합니다. 이렇게 설정하면, SQLAlchemy를 사용하여 데이터베이스와 상호작용할 수 있습니다.

2️⃣ 모델 정의

데이터베이스 테이블에 해당하는 모델 클래스를 정의합니다. 이 클래스는 **db.Model**을 상속받아 SQLAlchemy ORM을 통해 데이터베이스 작업을 수행할 수 있습니다.

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)  # 고유 ID 필드
    username = db.Column(db.String(80), unique=True, nullable=False)  # 사용자명 필드
  • User 모델은 db.Model을 상속받아 데이터베이스 테이블을 정의합니다.
  • id와 username은 User 테이블에서 사용되는 필드입니다.

3️⃣ 데이터 조회

데이터베이스로부터 데이터를 가져오는 과정은 주로 query 객체를 사용하여 수행됩니다. 아래는 몇 가지 일반적인 조회 방법입니다:

📍 모든 레코드 조회

users = User.query.all()
for user in users:
    print(user.username)
  • query.all(): User 테이블에서 모든 레코드를 가져옵니다.

📍 특정 조건을 만족하는 레코드 조회

user = User.query.filter_by(username='exampleuser').first()
if user:
    print(user.username)
  • filter_by(): 주어진 조건(username='exampleuser')에 맞는 첫 번째 레코드를 반환합니다.

📍 기본 키로 조회

user = User.query.get(user_id)
if user:
    print(user.username)
  • query.get(): 기본 키(primary key)로 레코드를 조회합니다. user_id로 사용자를 조회합니다.

4️⃣ 조회 결과 활용

조회된 결과는 Python 객체로 반환되므로, 이를 직접 사용하거나 필요한 데이터만 추출하여 다른 형식(JSON 등)으로 변환할 수 있습니다.

📍 Flask 뷰에서 JSON 응답하기

from flask import jsonify

@app.route('/users')
def list_users():
    users = User.query.all()
    return [{'id': user.id, 'username': user.username} for user in users]
  • 조회된 User 데이터를 JSON 형식으로 변환하여 클라이언트에게 반환합니다.

마무리 요약 및 복습 포인트

  • Flask-SQLAlchemy 설정: SQLAlchemy 객체를 생성하고 앱과 연결하여 데이터베이스 작업을 수행합니다.
  • 모델 정의: 데이터베이스 테이블을 db.Model 클래스를 상속받아 정의합니다.
  • 데이터 조회: query.all(), filter_by(), query.get()을 사용하여 데이터를 조회합니다.
  • 조회 결과 활용: 조회된 데이터를 필요한 형식으로 변환하고 클라이언트에게 응답합니다.