DB와 SQLite

CheolSoonKang·2024년 2월 19일

개념정리

목록 보기
9/18

데이터베이스란?

웹 개발을 하다보면 클라이언트의 정보 혹은 API로 받은 정보를 저장해야 할 때가 있다.
물론 서버가 계속 돌아갈때는 배열(리스트)나 객체(딕셔너리)에 담을 수 있다.
그러나 서버가 불안정하여 종료되거나 전원의 미공급으로 인해 프로그램이 종료될 경우 모든 정보가 휘발되어 버린다. 이를 방지하기 위하여 계속 필요한 정보들은 DB라는 곳에 저장해둔다.

종류

크게 SQL(RDBMS)과 NoSQL이 있다.

SQL(RDBMS)

행/열의 생김새가 정해진 Excel에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
ex) SQLite, MS-SQL, My-SQL 등

NoSQL

딕셔너리 형태로 데이터를 저장해두는 Database입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
ex) MongoDB

우리는 SQL 중 SQLite를 사용해 볼 것이다.


SQLite

  • 세계에서 가장 많이 사용되는 데이터베이스 중 하나
  • Python에는 기본적으로 SQLite가 내장되어 있다.
  • ORM(Object Relational Mapping)을 사용하여 DB를 조작한다.
    • ORM : SQL언어가 아닌 개발언어(지금은 Python)로 데이터베이스를 접근할 수 있게 해주는 툴
    • Python의 ORM은 SQLAlchemy로 Flask-SQLAlchemy 패키지를 사용할 예정
pip install Flask-SQLAlchemy
#app.py 기본 원형(DB와 app.py 연결)
from flask import Flask
import os
from flask_sqlalchemy import SQLAlchemy

basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\
        'sqlite:///' + os.path.join(basedir, 'database.db')

db = SQLAlchemy(app)
#DB에 들어갈 테이블 원형
#DB의 column을 정한다.
class Song(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    #int(정수형 , primary_key는 DB의 index로 중복 허용X
    username = db.Column(db.String, nullable=False)
    artist = db.Column(db.String, nullable=False)
    title = db.Column(db.String, nullable=False)
    image_url = db.Column(db.String, nullable=False)

    def __repr__(self):
        return f'{self.artist} {self.title} 추천 by {self.username}'

with app.app_context():
    db.create_all()

위의 DB로 CRUD(create,read,update,delete)를 해봅시다.

create(생성)

song1 = Song(username="추천자", title="노래제목1",artist="가수1", image_url="이미지 주소1")

db.session.add(song1)

각 column에 맞는 데이터를 입력후 db.session.add(song1)으로 DB에 넣어준다.

read(읽기)

#모든 값 출력
Song.query.all()

#조건에 맞는 값 출력
Song.query.filter_by(조건).all()

모든 DB의 출력을 원하는 경우 all()을 , 특정 데이터의 출력을 원하는 경우 .filter_by()를 사용해준다.

update(수정)

song_data = Song.query.filter_by(id=4).first()
song_data.title = '변경된제목'

db.session.add(song_data)
db.session.commit()

query.filter_by를 이용하여 update하고자 하는 데이터를 선택하여 바꾸고자 하는 column의 데이터를 수정 후 commit 해준다.

delete(삭제)

delete_data = Song.query.filter_by(id=4).first()
db.session.delete(delete_data)
db.session.commit()

update와 마찬가지로 delete하고자 하는 데이터를 선택하여 delete해준 후 commit 해준다.

profile
소통하며 성장하는 늦깎이 개발자

0개의 댓글