[FastAPI] fastAPI + SQLite3

도톨이·2024년 3월 17일

FastAPI

목록 보기
13/17
post-thumbnail

todo 프로젝트를 위해 SQLite3 를 사용할 것이다.
이를 위해 sqlite3 를 설치해야하는데
우선 터미널에 brew list 를 입력하여 sqlite3 가 설치되어 있는지 확인한다.(홈브루가 없다면 홈브루 먼저 설치하기!- 구글에 홈브루 설치치면 자세히 나온다.)

sqlite 없다면 brew install sqlite 를 입력하여 설치한다.

프로젝트 폴더에 cd 로 이동한후 지난번 생성된 toods.dp 를 sqlite3 로 열것이다.

sqlite3 todos.db

.schema 를 입력하면 데이터베이스의 모든 테이블을 확인할 수 있다.

그리고 sql 문을 실행할 수 있다. todos 테이블의 괄호 내부 칼럼들에 value 를 다음처럼 넣을 수 있다.

 insert into todos (title, description, priority, complete) values ('Go to the store', 'Pick up eggs', 5, False);

넣은 데이터를 확인하려면 다음 sql문을 실행한다.

SELECT * FROM todos;

더미 데이터를 더 집어넣고, 다음처럼 확인할 수 있다.

이제 db 를 fastAPI 와 연결하기 위한 코드를 짤 것이다. 뭔뜻이냐면 fastapi 엔드포인트로 db에 접근가능하게 한다는 뜻이다. 이는 주석으로 설명을 대체한다.

from fastapi import FastAPI, Depends  # FastAPI 프레임워크와 의존성 주입을 위한 Depends를 임포트합니다.
from typing import Annotated  # 변수에 추가 정보를 제공하기 위해 Annotated를 임포트합니다.
from sqlalchemy.orm import Session  # SQLAlchemy의 Session을 임포트하여 데이터베이스 세션 관리를 할 수 있습니다.
import models  # 데이터베이스 모델을 포함하고 있는 모듈을 임포트합니다.
from models import Todos  # Todos 모델 클래스를 직접 임포트합니다.
from database import engine, SessionLocal  # SQLAlchemy 엔진과 세션 생성을 위한 SessionLocal을 임포트합니다.

app = FastAPI()  # FastAPI 애플리케이션 인스턴스를 생성합니다.

# Todos 테이블이 데이터베이스에 존재하지 않는 경우, 이를 생성합니다.
# 이는 애플리케이션 시작 시 데이터베이스 스키마를 초기화하는 데 사용됩니다.
models.Base.metadata.create_all(bind=engine)

def get_db():
    db = SessionLocal()  # 새로운 데이터베이스 세션 인스턴스를 생성합니다.
    try:
        yield db  # 생성된 세션 인스턴스를 요청 처리 중에 사용할 수 있도록 제공합니다.
    finally:
        db.close()  # 요청 처리가 완료되면 데이터베이스 세션을 닫습니다. 이는 리소스를 해제하고 데이터베이스 연결을 안전하게 종료합니다.

db_dependency = Annotated[Session, Depends(get_db)]  # 의존성 주입을 위한 변수 선언. 이를 통해 데이터베이스 세션을 요청 핸들러에 주입합니다.

@app.get('/')
async def read_all(db: Annotated[Session, Depends(get_db)]):
    # 이 경로 연산은 데이터베이스 세션에 의존합니다. 해당 세션은 get_db 함수를 통해 제공됩니다.
    # 세션은 클라이언트로부터 들어온 요청을 처리하기 위해 사용되며, 요청 처리가 끝나면 종료됩니다.
    return db.query(Todos).all()  # Todos 테이블에서 모든 데이터를 조회하여 반환합니다.
profile
Kotlin, Flutter, AI | Computer Science

0개의 댓글