[DB] sqllite3

haeun·2023년 11월 24일
0

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

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

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개의 댓글