pip install fastapi uvicorn sqlalchemy pydantic
from sqlalchemy import Boolean, Column, Integer, String
from database import Base
-> 결국 Base =from sqlalchemy.ext.declarative import declarative_base
class User(Base):
__tablename__ ='users'
id = Column(Integer, primary_key = True, index = True)
username = Column(String(50),unique =True)
ORM인 sqlalchemy가 MySQL 데이터베이스에 필요한 테이블을 만들 수 있도록 한다.
Base: 모델 정의 시 상속해야하는 클래스
Base.metadata: 모든 모델의 테이블 메타데이터 모여 있음
Base.metadata.create_all(): 실제 DB에 테이블을 만드는 명령
목적 : python 클래스를 DB 테이블처럼 사용할 수 있게 함(ORM)
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
#1. 데이터배이스 연동 엔진 생성
SQLALCHEMY_DATABASE_URL ='sqlite:///./todosapp.db'
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args = {'check_same_thread': False})
#2.세션 팩토리 생성
SessionLocal = sessionmaker(autocommit = False, autoflush=False, bind = engine)
Base = declarative_base()
create_engine역할: 데이터베이스와 연결을 설정하는 객체(Engine)를 생성합니다.
설명: 이 객체는 데이터베이스와의 실제 통신을 담당하며, SQL을 실행할 수 있도록 도와줍니다.
형식:
from sqlalchemy import create_engine
engine = create_engine("데이터베이스 URL", 옵션들)
지원하는 데이터베이스 URL 예시:
"mysql+pymysql://user:password@localhost/dbname""postgresql://user:password@localhost/dbname"sessionmaker역할: 데이터베이스와의 트랜잭션을 관리하는 Session 객체를 생성하는 공장 함수(factory)입니다.
설명: Session은 ORM을 사용할 때 데이터베이스에 질의하고, 객체를 저장하거나 삭제할 때 사용됩니다.
형식:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
# 3. 세션 인스턴스 생성
session = Session()
# 4. 세션으로 DB 작업 수행
session.add(...)
session.commit()
bind=engine: 이 세션이 사용할 데이터베이스 연결(engine)을 지정session: 실제 작업을 수행할 수 있는 세션 인스턴스