🚀 Flask 프로젝트에서 ORM과 CRUD 구현하기 (SQLAlchemy 활용)1-3

2025. 4. 24. 14:45·기술블로그

🚀 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
'기술블로그' 카테고리의 다른 글
  • Error: Failed to find Flask application or factory in module 'wsgi'.
  • MySQL TRUNCATE vs DELETE 차이점 정리
  • 🚀 Flask 프로젝트에서 routes.py와 services의 역할 이해하기(1-2)
  • 🚀 Git Flow 브랜치 전략 초기 셋팅 가이드(1-1)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (472) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (21)
      • Database (40)
      • 멘토링 (7) N
      • 특강 (18)
      • 기술블로그 (126) N
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (34) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🚀 Flask 프로젝트에서 ORM과 CRUD 구현하기 (SQLAlchemy 활용)1-3
상단으로

티스토리툴바