FastAPI.4 SQL Database, ORM, SQLAlchemy

BodeulMaNN·2022년 12월 9일
0

FastAPI

목록 보기
4/8

FastAPI와 관계형(SQL) 데이터베이스

FastAPI는 관계형 데이터베이스를 사용할 필요가 없지만 원하는 모든 관계형 데이터베이스를 사용할 수 있다.

SQLAlchemy에서 지원하는 모든 데이터베이스를 적용할 수 있다.

  • PostgreSQL
  • MySQL
  • SQLite
  • Oracle
  • Microsoft SQL Server, etc.

ORM
https://gmlwjd9405.github.io/2019/02/01/orm.html
파일구조

.
└── sql_app
    ├── __init__.py
    ├── crud.py
    ├── database.py
    ├── main.py
    ├── models.py
    └── schemas.py

파일 __init__.py은 빈 파일일 뿐이지만 sql_app모든 모듈(Python 파일)과 함께 패키지라는 것을 Python에 알려줍니다.

SQLAlchemy

pip install sqlalchemy

파일 생성
>>> sql_app/database.py

sqlalchemy import

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

SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

SQLAlchemy용 데이터베이스 URL생성

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

SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

이 예에서는 SQLite 데이터베이스에 "연결"합니다(SQLite 데이터베이스로 파일 열기).
파일은 파일의 동일한 디렉토리에 있습니다 sql_app.db.
그렇기 때문에 마지막 부분은 ./sql_app.db입니다.
대신 PostgreSQL 데이터베이스 를 사용하고 있었다면 다음 행의 주석 처리를 제거하면 됩니다.

SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"

이것은 다른 데이터베이스를 사용하려는 경우 수정해야 하는 기본 행입니다.

SQLAlchemy engine만들기

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

SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

engine 에서
SQLite에서는 특별히 다음 행이 필요하다.

connect_args={"check_same_thread": False}

SessinLocal Class 생성
Base Class 생성

declarative_base()가 클래스를 리턴한다.

profile
반갑습니다

0개의 댓글