[DB] sqllite3

haeun·2023년 11월 24일

데이터베이스 관리 시스템으로 서버가 아닌 응용 프로그램에 넣어 사용하는 가벼운 데이터베이스이다.

간단한 앱을 만들어보기 위해서 사용해보려고한다.

DB 연결 설정 방법
먼저 가상환경에서 cmder에 라이브러리를 설치한다.


1. 라이브러리 설치

# 설치 라이브러리
pip install sqlalchemy 



2. DB 연결 정의

'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 클래스의 기능

  • 데이터베이스 모델 클래스를 정의하는 기능
  • 데이터베이스 모델 클래스와 데이터베이스 테이블을 연결하는 기능
  • 데이터베이스 모델 클래스를 사용하여 데이터베이스와 상호 작용하는 기능


3. DB 실행 정의

'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는 정형 비정형 다 보여준다.

4. DB 데이터 모델 정의

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>형식의 문자열이 반환되도록 정의되었다.


참고 문서

profile
환영합니다 :) 이 곳은 개인 공부를 정리하고 창의적으로 활용하기 위한 제 2의 전두엽으로 활용되고 있으며, 오류에 대한 피드백은 댓글로 남겨주시면 감사하겠습니다.

0개의 댓글