더북(TheBook)

파이썬(/appserver/apps/calendar/models.py)

from datetime import timezone, datetime
from typing import TYPE_CHECKING
from pydantic import AwareDatetime
from sqlalchemy_utc import UtcDateTime
from sqlmodel import SQLModel, Field, Relationship, Text, JSON, func
if TYPE_CHECKING:
    from appserver.apps.account.models import User

class Calendar(SQLModel, table=True):
    __tablename__ = "calendars"

    id: int = Field(default=None, primary_key=True)
    topics: list[str] = Field(sa_type=JSON, default_factory=list, description="게스트와 나눌 주제들")  # ①
    description: str = Field(sa_type=Text, description="게스트에게 보여 줄 설명")
    google_calendar_id: str = Field(max_length=1024, description="Google Calendar ID")

    created_at: AwareDatetime = Field(
        default=None,
        nullable=False,
        sa_type=UtcDateTime,
        sa_column_kwargs={
            "server_default": func.now(),
        },
    )
    updated_at: AwareDatetime = Field(
        default=None,
        nullable=False,
        sa_type=UtcDateTime,
        sa_column_kwargs={
            "server_default": func.now(),
            "onupdate": lambda: datetime.now(timezone.utc),
        },
    )

한 가지 특이 사항이라면 topics가 배열, 즉 list[str]로 자료형 각주가 되어 있다는 점입니다(①). 이는 문자열을 항목으로 갖는 리스트형 객체라는 것을 의미하는데, 이를 데이터베이스에서 JSON 자료형으로 다룹니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.