🚀 Flask 프로젝트에서 ORM과 CRUD 구현하기 (SQLAlchemy 활용)1-3
🎯 목표
- SQLAlchemy를 활용해 데이터베이스를 쉽게 조작(CRUD)하는 방법 이해하기
- services/ 폴더에 기능별 CRUD 함수 작성하기
- 구조적인 백엔드 설계 방법 익히기
✅ 전체 프로세스 흐름
1️⃣ models.py → 테이블 구조 정의 (이미 완료)
2️⃣ services/*.py → SQLAlchemy로 CRUD 함수 작성 (지금 여기!)
3️⃣ routes.py → API 연결
4️⃣ 테스트
🔹 services 폴더 역할 쉽게 이해하기
구분 역할 설명 비유 🌟
routes.py | 요청을 받고 서비스로 전달하는 안내데스크 | 👉 건물 입구 |
services/*.py | 실제로 DB 작업을 처리하는 작업실 | 👉 사무실 |
models.py | DB 테이블 구조 설계도 | 👉 창고 설계도 |
🎯 ORM을 활용한 CRUD 함수 작성 가이드
🔸 사용 기술: SQLAlchemy
- SQL을 직접 작성하지 않고, 파이썬 코드로 DB를 다루는 ORM 라이브러리
- 핵심 메서드
- db.session.add(객체) : 데이터 추가
- db.session.commit() : 저장 확정
- Model.query.all() : 전체 조회
- Model.query.filter_by() : 조건 조회
- db.session.delete(객체) : 데이터 삭제
📂 services 폴더 구조 및 역할
services/
├── users.py # 사용자 CRUD
├── questions.py # 질문 CRUD
├── choices.py # 선택지 CRUD
└── images.py # 이미지 CRUD
💡 각 파일별 CRUD 예시 코드
1️⃣ services/users.py
from app.models import User
from config import db
def create_user(name, age, gender, email):
user = User(name=name, age=age, gender=gender, email=email)
db.session.add(user)
db.session.commit()
return user.to_dict()
def get_all_users():
users = User.query.all()
return [user.to_dict() for user in users]
2️⃣ services/questions.py
from app.models import Question
from config import db
def create_question(title, sqe, image_id):
question = Question(title=title, sqe=sqe, image_id=image_id)
db.session.add(question)
db.session.commit()
return question.to_dict()
def get_all_questions():
questions = Question.query.all()
return [q.to_dict() for q in questions]
3️⃣ services/choices.py
from app.models import Choices
from config import db
def create_choice(content, sqe, question_id):
choice = Choices(content=content, sqe=sqe, question_id=question_id)
db.session.add(choice)
db.session.commit()
return choice.to_dict()
def get_choices_by_question(question_id):
choices = Choices.query.filter_by(question_id=question_id).all()
return [c.to_dict() for c in choices]
4️⃣ services/images.py
from app.models import Image
from config import db
def create_image(url, image_type):
image = Image(url=url, type=image_type)
db.session.add(image)
db.session.commit()
return image.to_dict()
def get_all_images():
images = Image.query.all()
return [img.to_dict() for img in images]
🚨 프로세스별 쉽게 이해하기
1️⃣ services/ 는 DB 작업을 대신 처리하는 비서팀
2️⃣ db.session.add() ➡️ "자료를 DB에 올리기"
3️⃣ db.session.commit() ➡️ "저장 확정하기"
4️⃣ Model.query.all() ➡️ "DB에서 전부 꺼내오기"
5️⃣ filter_by() ➡️ "조건에 맞는 데이터만 조회"
🎯 최종 정리
파일명 주요 함수 설명
users.py | create_user, get_all_users | 사용자 생성 & 전체 조회 |
questions.py | create_question, get_all_questions | 질문 생성 & 조회 |
choices.py | create_choice, get_choices_by_question | 선택지 생성 & 조회 |
images.py | create_image, get_all_images | 이미지 생성 & 조회 |
이제 이 구조를 기반으로 routes.py에서 API와 연결하면,
완성된 백엔드 서비스가 만들어집니다! 😄
다음 단계:
👉 routes.py 설정하기 & Postman으로 테스트하기!
'기술블로그' 카테고리의 다른 글
Error: Failed to find Flask application or factory in module 'wsgi'. (0) | 2025.04.25 |
---|---|
MySQL TRUNCATE vs DELETE 차이점 정리 (0) | 2025.04.25 |
🚀 Flask 프로젝트에서 routes.py와 services의 역할 이해하기(1-2) (0) | 2025.04.24 |
🚀 Git Flow 브랜치 전략 초기 셋팅 가이드(1-1) (0) | 2025.04.24 |
Flask-Login 을 활용한 간단한 로그인 프로젝트 (0) | 2025.04.23 |