IT기타

fastAPI, postgre DB 연결 설정

emilyyoo 2025. 2. 4. 12:44
728x90

 

1. DB 주소 확인 

 
나는 vercel 이용하고 있어서 아래와 같이 확인했다.
 
https://vercel.com/

Dashboard

vercel.com

 

 
 

 
 
 

아래화면에서 "POSTGRES_URL_NON_POOLING" 주소로 확인. 

 
 

 
 
 
 

2. .env 같은 설정 파일에서 위에서 확인한 데이터베이스 연결 정보 입력.

**이때, "postgres://" 라고 되어있다면 "postgresql://"로 바꿔준다. 

 
 

 
 
 

 

3. 데이터베이스 연결
(ex) db.py) : Base를 생성, DB 세션관리 의존성 주입 함수 생성.

 
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv
import os

# 환경 변수 로드
load_dotenv()

# DB 연결 URL 가져오기
DATABASE_URL = os.getenv("POSTGRES_URL_NON_POOLING")

# DB 엔진 생성 (연결 관리)
engine = create_engine(DATABASE_URL)

# DB 세션 설정
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 모델 클래스들이 상속받을 Base 클래스 생성
Base = declarative_base()

# DB 세션 가져오기 함수
def get_db():
      db = SessionLocal()
      try:
           yield db
      finally:
           db.close()

 
 

 

4. DB 테이블 모델 정의
(ex) models/user.py)

 
from sqlalchemy import Column, Integer, String
from .db import Base

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)
    password = Column(String)
 

 

5. API 엔드포인트
(ex) endpoints/user.py)

 

from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.orm import Session
from app.db import get_db # 데이터베이스 연결
from pydantic import BaseModel
from app.models.user import User # SQLAlchemy 모델


router = APIRouter()


@router.get("/users/{user_id}", response_model=UserResponse)
def get_user(user_id: int, db: Session = Depends(get_db)):
    user = get_user(db, user_id)
    return user

 

 

6. 서버 실행.
uvicorn <main함수> --reload


EX)) 
uvicorn app.main:app --reload
 

 

 

7. swagger로 확인

728x90