스파르타코딩클럽
[GPT] 웹개발 종합반 : 최지웅
https://spartacodingclub.kr/online/web_chatgpt
Database (DB)
데이터의 모음. 파일.
우리 눈에 보이지는 않지만 Database에는 Index라는 순서로 데이터들이 정렬되어 있는데
이를 이용해서 데이터를 잘 넣고, 나중에 찾을 때도 쉽게 찾을 수 있다.
Database의 두 가지 종류
RDBMS(SQL)
ex) SQLite, MS-SQL, My-SQL 등
행/열의 생김새가 정해진 Excel에 데이터를 저장하는 것과 유사하다.
정형화되어 있는 만큼 중간에 열을 추가하거나 하는 일은 어렵지만, 그만큼 일관성이나 분석에는 용이하다.
No-SQL
ex) MongoDB
딕셔너리 형태로 데이터를 저장해두는 DB
자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족하다.
SQLite
작지만 빠르고 탄탄한 RDBMS. 세계에서 가장 많이 사용되는 DB 중 하나다.
Python에 기본적으로 내장되어 있다.
셋팅
Python 기본 내장이기 때문에 별도 설치 없이 VScode에서 db 확장자로 파일을 만들기만 하면 SQLite를 사용 가능하다.
확장 프로그램 SQLite3 Editor 만 추가로 설치한다.
SQLite와 같은 DB에서 데이터를 다루기 위해서는 보통 SQL을 사용하지만 더 쉬운 방법을 채택하기로 한다.
프로그래밍 언어(현재는 Python)로 DB를 다루는 방법인 ORM으로도 사용이 가능하다.
SQLite 시작하기
우선 가상환경 만들고 SQLAlchemy 패키지를 설치해줌
$ pip install Flask-SQLAlchemy
그리고 app.py를 생성해
Flask와 DB를 연결하는 코드, DB 모델을 정의하는 코드를 차례로 작성해줌
# SQLAlchemy 준비 코드
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)
# 테이블 생성 코드
class Song(db.Model):
id = db.Column(db.Integer, primary_key=True)
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()
> Song 이라는 이름의 시트를 생성
> username(추천자), artist(가수), title(노래 제목), image_url(포스터 주소) 데이터를 차례로 사용
이를 이용해 아래 Excel 파일의 설계도를 만든 것으로 생각하면 된다.
위 설계도를 바탕으로 실제 DB를 만들어 준다.
가상 환경을 활성화해준 뒤 shell을 켜주면 코드를 넣을 수 있는 화면 같은 것이 뜬다.
# 가상 환경 활성화
$ source venv/Script/activate
# DB 만들기 위한 shell 활성화
$ flask shell
# 활성화된 shell을 종료하려면
>>> quit()
이어서 아래와 같이 입력해주면 아까 만들어둔 설계도로 DB가 만들어진다.
>>> from app import db, Song
>>> db.create_alll()
database.db 파일을 통해 다섯가지 컬럼이 만들어진 것을 확인할 수 있다.
SQLAlchemy로 Database 조작하기
저장
flask shell에 아래 내용 입력해서 DB에 데이터를 저장할 수 있다.
>>> song = Song(username="추천자", title="노래제목",
>>> artist="가수", image_url="이미지 주소")
>>> db.session.add(song) # DB에 업로드
>>> db.session.commit() # DB에 저장
다수의 데이터를 저장할 수도 있다.
조회
저장된 데이터를 조회하려면 query.all 을 이용한다.
>>> Song.query.all()
리스트 형태로 저장되어있기 때문에
python에서 리스트를 다루던 것과 비슷한 방식으로 원하는 데이터를 뽑아낼 수도 있다.
위와 같이 모든 조회된 데이터를 변수에 저장한 뒤 원하는 컬럼의 데이터를 찾아낼 수 있다.
조건
찾을 데이터에 조건을 붙이려면 filter_by를 사용한다.
여기에서 모든 데이터를 가져오려면 all() 예를 들어 첫번째 데이터만 가져오려면 first()를 붙이면 된다.
수정
위 내용들을 활용하여 데이터를 바꿀 수도 있다.
데이터를 저장하는데 이용하던 add 명령어를 활용한다.
>>> song_data = Song.query.filter_by(id=4).first()
>>> song_data.title = "새제목"
>>> db.session.add(song_data)
>>> db.session.commit()
삭제
또한 delete 명령어를 이용해 데이터를 삭제할 수도 있다.
>>> delete_data = Song.query.filter_by(id=3).first()
>>> db.session.delete(delete_data)
>>> db.session.commit()
'기록방 > 스파르타코딩클럽' 카테고리의 다른 글
[스파르타] ChatGPT로 웹개발 완전정복 5주차 - Flask & DB (1) | 2023.10.09 |
---|---|
[스파르타] ChatGPT로 웹개발 완전정복 3주차 - Flask (1) | 2023.10.08 |
[스파르타] ChatGPT로 웹개발 완전정복 3주차 - Python (0) | 2023.10.06 |