IT 인터넷/Python

FastAPI와 SQLAlchemy를 사용한 데이터베이스 관리

Banjubu 2023. 3. 3. 10:51
반응형

 

FastAPI와 SQLAlchemy를 사용한 데이터베이스 관리는 Python으로 웹 애플리케이션을 개발하는 데 매우 유용한 방법입니다. FastAPI는 빠른 속도와 간단한 사용법을 제공하는 웹 프레임워크이며, SQLAlchemy는 강력한 ORM(Object-Relational Mapping) 도구로서 데이터베이스와의 상호작용을 간단하게 만들어줍니다.

이 글에서는 FastAPI와 SQLAlchemy를 사용하여 데이터베이스를 관리하는 방법에 대해 살펴보겠습니다. 먼저 FastAPI에서 SQLAlchemy를 사용하기 위해 필요한 패키지를 설치해야 합니다. 다음과 같이 명령어를 실행하면 됩니다.

pip install fastapi sqlalchemy psycopg2-binary

 

위 명령어는 FastAPI, SQLAlchemy, psycopg2-binary라는 PostgreSQL DBAPI 패키지를 설치합니다. 만약 다른 데이터베이스를 사용하고 싶다면, 해당 데이터베이스의 DBAPI 패키지를 설치하면 됩니다.

이제 FastAPI 애플리케이션에서 SQLAlchemy를 사용하는 방법을 살펴보겠습니다. 다음과 같이 SQLAlchemy의 create_engine 함수를 사용하여 데이터베이스 연결을 설정할 수 있습니다.

from sqlalchemy import create_engine

DATABASE_URL = "postgresql://user:password@host:port/dbname"

engine = create_engine(DATABASE_URL)

 

위 코드에서 DATABASE_URL은 데이터베이스 연결 정보를 담고 있습니다. PostgreSQL을 사용하는 경우, 위와 같은 형식으로 작성할 수 있습니다. create_engine 함수는 engine 객체를 반환하며, 이 객체를 사용하여 데이터베이스와 상호작용합니다.

이제 SQLAlchemy의 ORM 기능을 사용하여 데이터베이스 모델을 정의할 수 있습니다. 다음과 같이 SQLAlchemy의 declarative_base 함수를 사용하여 모델 베이스 클래스를 정의합니다.

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

 

 

모델 클래스는 Base 클래스를 상속하여 정의할 수 있습니다. 예를 들어, 다음과 같이 User 모델 클래스를 정의할 수 있습니다.

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = "users"

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

 

위 코드에서 __tablename__ 속성은 데이터베이스 테이블의 이름을 지정합니다. id, name, email, password 속성은 각각 데이터베이스 컬럼을 정의합니다.

이제 FastAPI 애플리케이션에서 데이터베이스 모델을 사용할 수 있습니다. 다음과 같이 SQLAlchemy의 SessionLocal 클래스를 사용하여 데이터베이스 세션을 생성하고, 이를 사용하여 데이터베이스에 쿼리를 실행할 수 있습니다.

from sqlalchemy.orm import Session

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

 

위 코드에서 SessionLocal 클래스는 SQLAlchemy의 세션을 생성하는 클래스입니다. get_db 함수는 FastAPI 애플리케이션에서 데이터베이스 세션을 사용할 수 있도록 제너레이터 함수를 반환합니다. yield 문을 사용하여 데이터베이스 세션을 반환하고, 세션을 사용한 작업이 완료된 후에는 finally 문을 사용하여 세션을 종료합니다.

이제 FastAPI에서 데이터베이스 쿼리를 실행하는 방법에 대해 살펴보겠습니다. 다음과 같이 FastAPI 애플리케이션의 경로 연산자에서 db: Session = Depends(get_db)와 같이 Depends 클래스를 사용하여 데이터베이스 세션을 주입할 수 있습니다.

from fastapi import Depends, FastAPI, HTTPException
from sqlalchemy.orm import Session

app = FastAPI()

@app.post("/users/")
def create_user(user: UserCreate, db: Session = Depends(get_db)):
    db_user = User(name=user.name, email=user.email, password=user.password)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

 

위 코드에서 create_user 함수는 UserCreate 모델을 받아들이고, 데이터베이스 세션을 db 매개변수로 주입받습니다. db.add 메서드를 사용하여 데이터베이스에 새로운 사용자를 추가하고, db.commit 메서드를 사용하여 변경 사항을 데이터베이스에 반영합니다. 마지막으로 db.refresh 메서드를 사용하여 데이터베이스에서 생성된 사용자 정보를 가져옵니다.

이와 같은 방법으로 FastAPI와 SQLAlchemy를 사용하여 데이터베이스를 관리할 수 있습니다. 이를 활용하여 간단한 블로그 애플리케이션을 만들어보는 것도 좋은 방법입니다. FastAPI와 SQLAlchemy의 자세한 사용법은 공식 문서를 참고하시면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
LIST