데이터베이스 관리 시스템으로 서버가 아닌 응용 프로그램에 넣어 사용하는 가벼운 데이터베이스이다.
간단한 앱을 만들어보기 위해서 사용해보려고한다.
DB 연결 설정 방법
먼저 가상환경에서 cmder에 라이브러리를 설치한다.
# 설치 라이브러리
pip install sqlalchemy
'Path'/database.py에 아래 내용을 기반으로 정의한다.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
DB_URL = 'sqlite:///todo.sqlite3'
# 데이터베이스에 연결하는 엔진을 생성하는 함수
engine = create_engine(DB_URL, connect_args={'check_same_thread': False})
# 데이터베이스와 상호 작용하는 세션을 생성하는 클래스
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# SQLAlchemy의 선언적 모델링을 위한 기본 클래스
Base = declarative_base()
declarative_base 클래스의 기능'Path'/main.py에 아래 내용을 기반으로 정의한다.
from database import engine, SessionLocal
from sqlalchemy.orm import Session
import models
# models에 정의한 모든 클래스, 연결한 DB엔진에 테이블로 생성
models.Base.metadata.create_all(bind=engine)
... 생략 ...
def get_db():
db = SessionLocal()
try:
yield db
finally:
# 마지막에 무조건 닫음
db.close()
yield 키워드는 FastAPI가 함수의 실행을 일시 중지하고 데이터베이스 세션을 호출자에게 반환하도록 지시한다.
여기에서 import된 database 는 database.py 로 모듈화 한 것을 사용하는 것이다.
DBeaver Community 23.2.5는 rdbms만 pro는 정형 비정형 다 보여준다.
from sqlalchemy import Column, Integer, Boolean, Text
from database import Base
class Todo(Base):
__tablename__ = 'todos'
id = Column(Integer, primary_key=True)
task = Column(Text)
completed = Column(Boolean, default=False)
repr 메소드는 객체를 문자열로 표현하기 위해 사용된다. repr 메소드를 호출하면 <Todo 1>형식의 문자열이 반환되도록 정의되었다.