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 테이블에서 모든 데이터를 조회하여 반환합니다.