본문 바로가기
코딩취미/Python

SQLModel - Pydantic + SQLAlchemy의 강력한 조합

by 브링블링 2025. 8. 17.
반응형

SQLModel은 FastAPI의 창시자 Sebastián Ramírez가 개발한 ORM 라이브러리로,

 

Pydantic의 데이터 유효성 검사와 SQLAlchemy의 데이터베이스 ORM 기능을 통합한 최신 기술입니다.

 

코드가 간결하면서도 타입 안정성이 높아, API 개발과 DB 연동을 한 번에 처리하기에 매우 적합합니다.


📌 SQLModel이란?

SQLModel은 pydantic의 모델링 방식과 sqlalchemy의 DB 연동 기능을 통합한 ORM입니다.

 

타입 힌트를 그대로 유지하면서 SQL 쿼리를 작성할 수 있으며, SQLite 등 다양한 DB 백엔드와 호환됩니다.


🧪 예시 프로젝트: 도서 정보 CRUD API

📁 프로젝트 구조

 
book_api/
├── models.py            # SQLModel 모델 정의
├── main.py              # DB 생성 및 CRUD 함수
└── test_main.py         # 테스트 코드
반응형

models.py

 
from sqlmodel import SQLModel, Field
from typing import Optional

class Book(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    title: str
    author: str

main.py

 
from sqlmodel import create_engine, Session, select
from models import Book, SQLModel

engine = create_engine("sqlite:///database.db")

# DB 테이블 초기화
def init_db():
    SQLModel.metadata.create_all(engine)

# 도서 추가
def add_book(title: str, author: str):
    with Session(engine) as session:
        book = Book(title=title, author=author)
        session.add(book)
        session.commit()

# 도서 조회
def get_books():
    with Session(engine) as session:
        return session.exec(select(Book)).all()

test_main.py

 
from main import init_db, add_book, get_books

def test_book_crud():
    init_db()
    add_book("1984", "George Orwell")
    books = get_books()
    assert any(b.title == "1984" for b in books)

🔧 기술 스택 및 레이아웃

  • Python 3.10+
  • SQLModel
  • SQLite
  • Pydantic 기반 모델링 + SQLAlchemy ORM
  • 단일 파일 테스트 가능

🔁 유사 기술

  • SQLAlchemy: 가장 널리 쓰이는 ORM
  • Peewee: 경량 ORM
  • Tortoise ORM: async 지원 ORM
  • Django ORM: Django 내장 ORM

🏷️ 핵심 키워드 10개

  1. SQLModel
  2. Pydantic ORM
  3. SQLAlchemy
  4. FastAPI 호환
  5. SQLite
  6. 타입 기반 DB 모델
  7. CRUD
  8. 데이터베이스 유효성
  9. 모델 통합
  10. Python ORM
반응형