FastAPI-ORM 데이터베이스 연동

DEVHOB·2025년 6월 11일

FastAPI 학습 과정

목록 보기
2/6

sqlalchemy 를 활용한 ORM 데이터베이스 연동

pip install fastapi uvicorn sqlalchemy pydantic

테이블과 매핑되는 클래스 정의(model.py)

from sqlalchemy import Boolean, Column, Integer, String
from database import Base
-> 결국 Base =from sqlalchemy.ext.declarative import declarative_base  

class User(Base):
    __tablename__ ='users'

    id = Column(Integer, primary_key = True, index = True)
    username = Column(String(50),unique =True)

ORM인 sqlalchemy가 MySQL 데이터베이스에 필요한 테이블을 만들 수 있도록 한다.

ORM이란??????

  • ORM(객체-관계 매핑)을 사용할 때 모든 모델 클래스의 부모(Base 클래스)를 생성하는 함수
  • Base는 모든 SQLAlchemy 모델 클래스가 상속받아야 하는 기본 클래스
  • 이 Base를 상속받은 클래스는 SQLAlchemy에게 "이 클래스는 데이터베이스 테이블과 매핑되는 ORM 모델입니다"라고 알려주는 역할

🔹 1. Base

: 모델 정의 시 상속해야하는 클래스

🔹2. Base.metadata

: 모든 모델의 테이블 메타데이터 모여 있음

🔹 3. Base.metadata.create_all()

: 실제 DB에 테이블을 만드는 명령

목적 : python 클래스를 DB 테이블처럼 사용할 수 있게 함(ORM)

데이터베이스 연동(database.py)

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base     

#1. 데이터배이스 연동 엔진 생성
SQLALCHEMY_DATABASE_URL ='sqlite:///./todosapp.db'
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args = {'check_same_thread': False})

#2.세션 팩토리 생성
SessionLocal  = sessionmaker(autocommit = False, autoflush=False, bind = engine)

Base = declarative_base()

🔹 1. create_engine

역할: 데이터베이스와 연결을 설정하는 객체(Engine)를 생성합니다.

설명: 이 객체는 데이터베이스와의 실제 통신을 담당하며, SQL을 실행할 수 있도록 도와줍니다.

형식:

from sqlalchemy import create_engine
engine = create_engine("데이터베이스 URL", 옵션들)

지원하는 데이터베이스 URL 예시:

  • MySQL: "mysql+pymysql://user:password@localhost/dbname"
  • PostgreSQL: "postgresql://user:password@localhost/dbname"

🔹 2. sessionmaker

역할: 데이터베이스와의 트랜잭션을 관리하는 Session 객체를 생성하는 공장 함수(factory)입니다.

설명: Session은 ORM을 사용할 때 데이터베이스에 질의하고, 객체를 저장하거나 삭제할 때 사용됩니다.

형식:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)

# 3. 세션 인스턴스 생성
session = Session()

# 4. 세션으로 DB 작업 수행
session.add(...)
session.commit()
  • bind=engine: 이 세션이 사용할 데이터베이스 연결(engine)을 지정
  • session: 실제 작업을 수행할 수 있는 세션 인스턴스
profile
배운 내용 복습 및 새로운 내용 학습

0개의 댓글