앞서 나온 schemas.py가 API 요청 / 응답을 위하여 데이터 구조를 정의했다면, 이 파일은 DB 테이블 구조를 정의한다.
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, DateTime, Text
from sqlalchemy.orm import relationship
from datetime import datetime
from database import Base
class Patient(Base):
__tablename__ = "patients"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
birth_date = Column(DateTime)
gender = Column(String)
contact = Column(String)
address = Column(String)
is_active = Column(Boolean, default = True)
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
examinations = relationship("Examination", back_populates="patient")
treatments = relationship("Treatment", back_populates="patient")
이와 같다.
다른 것보다 from database import Base의 경우,
database.py에서 정의된 SQLAlchemy의 기본 클래스이다.
해당 부분을 모든 모델이 상속받게 된다.
database.py의 base의 경우 다음과 같다.
SQLALCHEMY_DATABASE_URL = "sqlite:///./healthcare.db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
이제 세부 코드르 살펴보면,
class Patient(Base):
__tablename__ = "patients"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
birth_date = Column(DateTime)
gender = Column(String)
contact = Column(String)
address = Column(String)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
examinations = relationship("Examination", back_populates="patient")
treatments = relationship("Treatment", back_populates="patient")
관계 관련
examinations = relationship("Examination", back_populates="patient")
treatments = relationship("Treatment", back_populates="patient")
back_populates 속성은 양방향 관계를 설정함.
여기까지로 main.py와 schemas.py, database.py, models.py의 구조와 간단한 기본적 구현에 대해서 알아봤다.
[FastAPI] FastAPI 내부 코드 확인하기 (FastAPI 클래스 생성자 메소드 debug 인자) (0) | 2025.04.17 |
---|---|
[FastAPI] (STT 기능 API 만들기)음성인식 데이터 처리 (WAV to PCM) #1 (0) | 2025.04.16 |
[FastAPI] CRUD 구현 (schemas.py 부분) #3 (0) | 2025.04.11 |
[FastAPI] CRUD 구현 (database.py부분 중점) #2 (0) | 2025.04.09 |
[FastAPI] CRUD 구현 (Create 하는 법, routers/ 부분 중점) #1 (0) | 2025.04.09 |