AI/AI 서비스 개발

[AI 서비스 개발] Pydantic과 SQLAlchemy

brave_sol 2025. 1. 22. 23:02

1. Pydantic

- python에서 데이터 유효성검사와 데이터 구조를 정의하는데 사용

- 데이터의 정확성타입 안전성 보장

 

1) 데이터 직렬화(Serialization)

- 데이터를 저장하거나 전송할 수 있는 형식으로 변환하는 과정

- 예: 데이터(객체, 딕셔너리 등)을 JSON, XML, 바이너리 형식 등으로 변환

- 네트워크 통신이나 파일 저장을 위해 사용

import json

# 파이썬 딕셔너리 데이터
data = {"name": "John", "age": 30}

# JSON 형식으로 직렬화
json_data = json.dumps(data)
print(json_data)  # '{"name": "John", "age": 30}'

 

2) 역직렬화

- 직렬화된 베이터를 원래 데이터 구조로 복원하는 과정

- JSON으로 변환된 데이터를 다시 Python 객체(딕셔너리 등)로 복원

- 주로 저장된 데이터를 읽을 때나 API 응답 데이터 처리에 사용

# JSON 데이터를 원래 딕셔너리로 역직렬화
original_data = json.loads(json_data)
print(original_data)  # {'name': 'John', 'age': 30}

 

3) 제약조건

- ge : ~보다 크거나 같다

- le : ~보다 작거나 같다

- min_length : 문자열의 최소 기이

- max_length : 문자열의 최대 길이

 

2. SQLAlchemy

- python에서 데이터베이스와 상호작용하기 위한 ORM 및 데이터베이스 툴킷

- 데이터베이스 테이블과 python 객체간의 매핑 제공

 

3. Pydantic과 SQLAlchemy의 결합

- 데이터 유효성 검증과 데이터 베이스 작업을 매끄럽게 연결

- 예시

from pydantic import BaseModel
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# SQLAlchemy 설정
Base = declarative_base()

class UserDB(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

# Pydantic 모델 정의
class UserSchema(BaseModel):
    id: int
    name: str
    email: str

# 데이터베이스 초기화
engine = create_engine("sqlite:///example.db", echo=True)
Session = sessionmaker(bind=engine)
session = Session()

# SQLAlchemy에서 데이터를 가져오고 Pydantic으로 변환
db_user = session.query(UserDB).filter_by(id=1).first()
if db_user:
    user_schema = UserSchema.from_orm(db_user)
    print(user_schema.json())  # Pydantic으로 직렬화된 JSON 출력
반응형