RDB 연동 - 2
RDB 연동 - 1
RDB는 관계형 데이터 베이스의 약어입니다. 전통적으로 많이 사용하는 DBMS입니다. 즉, 데이터 베이스라고 합니다. python에서 DB 즉, 데이터 베이스를 다루기 위해서는 ORM(Object Relation Mapper)라는 것
kbgw2001.tistory.com
RDB 연동 - 1에서의 설정을 완료했다면, RDB와 연결할 database.py 코드를 아래와 같이 작성합니다.
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine("mysql+pymysql://admin:1234@0.0.0.0:3306/dev")
SessionLocal = sessionmaker(
bind=engine,
autocommit=False,
autoflush=False)
Base = declarative_base()
우선, sqlalchemy에 create_engine을 불러와서 engine을 만들어줍니다. create_engine의 인자 값으로 다음과 같은 mysql+pymysql://admin:1234@0.0.0.0:3306/dev 주소를 입력으로 줍니다.
- mysql+pymysql : 해당 부분은 스킴 즉, 프로토콜에 해당되는 부분입니다.(http나 https와 같은 의미 반드시 이렇게 작성되어야 합니다.)
- admin : admin은 user_id에 해당되는 부분입니다.
- 1234 : 해당 user_id의 비밀번호입니다.
- 0.0.0.0 : localhost입니다. IP 주소입니다.
- 3306 : 해당 DB에 접속하기 위한 port 번호입니다.
- dev : 해당 DB에 dev 디렉토리입니다.
이렇게 engine을 만들어 주고, 만들어진 engine을 사용해서 sessionmaker를 통해서 session을 만들어 줍니다. 이렇게 만들어진 SessionLocal을 사용할 것입니다.
Base는 declarative_base()를 통해서 만들어집니다. 그리고 Base는 models.py에서 사용할 것입니다.
models.py의 코드는 다음과 같이 작성해 주시면 됩니다.
from sqlalchemy import Boolean, Column, Integer, String
from database import Base
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
email = Column(String(255), unique = True, index = True)
password = Column(String(255))
is_active = Column(Boolean, default=True)
models.py 코드의 내용은 sqlalchemy를 사용해서 DB의 Table을 정의합니다. 우선, database.py에서 만든 Base를 Models에 User class에 상속합니다.
id, email, password, is_active라는 이름에 colum들이 있습니다.
다음으로 확인해 볼건 schemas.py에 내용입니다.
from pydantic import BaseModel
class UserBase(BaseModel):
email: str
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
email: str
is_active: bool
class Config:
orm_mode = True
위에 작성된 코드는 Pydantic 모델을 정의한 파일입니다. 사실, SQLAlchemy와 Pydantic 모두 "모델"이란 용어를 사용합니다. 그래서 이 둘을 같이 사용할 경우 용어를 정의해야 하는데, FastAPI 공식 문서에는 pydantic "model"을 "schema"로 표현해 문제를 해결했습니다.
파일명은 반드시 따를 필요는 없습니다. 다만, 네이밍 컨벤션을 따르는게 좋으므로 공식 문서에 나온대로 진행하겠습니다.
위에 코드를 살펴보면 pydantic의 BaseModel을 상속받은 pydantic의 UserBase라는 Class가 있고, UserBase를 상속 받는 UserCreate와 User가 있습니다.
다만 하나 다른게 있습니다. 바로 class Config 부분입니다. 해당 부분에 orm_model = True라는 부분이 있는데, 해당 부분은 pydantic이 Alchemy 모델을 사용할 수 있게 해줍니다.