우리 눈에 보이진 않지만, 사실 Database에는 Index
라는 순서대로 데이터들이 정렬되어 있다.
행/열의 생김새가 정해진 테이블
형태로, Excel에 데이터를 저장하는 것과 유사하다.
데이터 50만 개가 적재된 상태에서 갑자기 중간에 열을 하나 더하기는 어렵다.
그러나 정형화되어 있는 만큼 오류가 적고 데이터의 일관성이나 분석에 용이할 수 있습니다.
딕셔너리
형태로 데이터를 저장해두는 Database이다.
따라서 데이터 하나 하나 마다 같은 값들을 가질 필요가 없다.
자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.
변화가 잦은 스타트업에서 주로 사용한다고 한다.
아주 간단하게, 데이터베이스는 일반적으로 파일
로 저장된다.
그리고 그 파일을 열어보기 위한 프로그램(RDBMS)을 설치하는 것이 필요하다.
데이터 베이스 중 하나인 SQLite
도 하나의 파일로 이루어져 있다.
SQLite3 Editor VScode Extension
을 설치해서 SQLite를 사용해보자.환경 설정을 위해 현재 폴더에 database.db
파일 생성 (환경 설정 후 삭제하면 된다)
파일 우클릭
open with
클릭
기본 설정 변경 위해 Configure default editor fot *.db …
클릭
SQLite3 Editor
선택
database.db
파일 선택 시 아래 화면이 나오면 설정 완료
Sqlite 확장 프로그램
을 사용하면, 아래처럼 바로 데이터를 수정할 수도 있다.
작지만 빠르고 탄탄하므로 SQLite는 세계에서 가장 많이 사용되는 데이터베이스 중 하나이다.
파일이름.db
형식으로 파일을 만들기만 하면 손쉽게 사용할 수 있다.SQLite와 같은 데이터베이스에서 데이터를 다루기 위해서는 보통 SQL을 사용해야 하지만, ORM
을 사용하면 SQL을 사용하는 것보다 손쉽게 데이터베이스를 다룰 수 있다.
ORM(Object Relational Mapping, 객체-관계 매핑)
은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
클래스
를 사용하고,테이블
을 사용하기 때문에,간단하게 가자면, ORM
은 프로그래밍 언어(지금은 Python)로 데이터베이스를 다루는 방법이라고 알아두면 된다.
Python으로 SQLAlchemy를 다루려면 가상 환경을 세팅해야 한다.
DB 폴더 구조
- - -
DB
|— venv (✅ 가상환경)
|— app.py (✅ 서버)
|— database.db (✅ 데이터베이스)
DB 폴더구조도 규칙 정해진대로!
pip install Flask-SQLAlchemy
로 패키지 설치
SQLAlchemy를 사용하면 파이썬 코드로 SQL 데이터 베이스를 다룰 수 있다.
pip list
로 어떤 패키지가 다운 받아져 있는지 확인 가능
from flask import Flask
import os
from flask_sqlalchemy import SQLAlchemy
# 🔥 SQLAlchemy를 사용하여 파이썬 코드로 SQL 데이터 베이스를 다룰 수 있다.
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)
from flask import Flask
import os
from flask_sqlalchemy import SQLAlchemy
# 🔥 SQLAlchemy를 사용하여 파이썬 코드로 SQL 데이터 베이스를 다룰 수 있다.
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)
# ✅ Song 모델 정의
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()
예를 들어 Excel 파일의 설계도를 만든 것이라고 생각하면 된다.
훑으면서 나가는 거니까 챗 지피티한테 물어보면서...
source venv/Scripts/activate
로 활성화할 수 있다.flask shell
로 (venv)가 있는지 확인한다.flask shell
를 입력한다.>>> from app import db, Song (엔터)
>>> db.create_all()
db.create_all()
db.drop_all()
database.db
파일을 클릭했을 때 아래와 같이 원하는 데이터가 테이블에 들어가 있으면 된다.flask shell
이 켜져 있는지 확인하고,# ✅ 데이터 만들기
song = Song(username="추천자", title="노래제목",
artist="가수", image_url="이미지 주소")
# ✅ DB에 데이터 업로드
db.session.add(song)
# ✅ DB에 데이터 저장
db.session.commit()
# ✅ 데이터 여러개 만들기
song1 = Song(username="추천자", title="노래제목1",
artist="가수1", image_url="이미지 주소1")
song2 = Song(username="추천자", title="노래제목2",
artist="가수2", image_url="이미지 주소2")
song3 = Song(username="추천자", title="노래제목3",
artist="가수3", image_url="이미지 주소3")
# ✅ DB에 데이터 하나 씩 업로드
db.session.add(song1)
db.session.add(song2)
db.session.add(song3)
# ✅ DB에 데이터 모두 저장
db.session.commit()
터미널 flask shell에 테이블이름.query.all()
을 실행하면 Database에 있는 모든 데이터를 조회할 수 있다.
Song.query.all()
리스트
형식으로 들어가 있다.리스트
형식으로 사용할 수 있다.>>> song_list = Song.query.all()
>>> song_list[0] # 가수:노래제목 추천 by 추천자
>>> song_list[0].title # 노래 제목
Song.query.filter_by(조건).all()
을 사용하면 조건에 맞는 데이터를 전부 가져올 수 있다.Song.query.filter_by(username='추천자').all()
# [가수:노래제목 추천 by 추천자, 가수1:노래제목1 추천 by 추천자]
Song.query.filter_by(id=1).first() # 가수2:노래제목2 추천 by 추천자
Song.query.filter_by(title='노래제목').first() # 가수:노래제목 추천 by 추천자
데이터를 가져오고, 파이썬에서 변수의 값을 변경하는 것처럼 수정하면 된다.
📌 수정 사항을 반영하기 위해서는 꼭
업로드add()
하고
저장db.session.commit()
해줘야 한다!
song_data = Song.query.filter_by(id=4).first()
song_data.title = '변경된제목'
db.session.add(song_data)
db.session.commit()
데이터 수정과 마찬가지로 데이터 1개를 들고 온 다음 db.session.delete()로 삭제 하면된다.
📌 데이터 삭제에 대한 사항을 반영하기 위해서는 꼭
저장db.session.commit()
해줘야 한다!
delete_data = Song.query.filter_by(id=4).first()
db.session.delete(delete_data)
db.session.commit()
외우기보다는 원리를 파악하여 찾아서 사용하면 된다.
핵심은 데이터를 저장하고, 찾고, 바꾸고, 지우는 것이다.
# 데이터를 DB에 저장하기
song = Song(username="추천자", title="노래제목",
artist="가수", image_url="이미지 주소")
db.session.add(song)
db.session.commit()
# 모든 데이터 조회하기
song_list = Song.query.all()
# 데이터 1개 가져오기
Song.query.filter_by(id=3).first()
# 데이터 변경하기
song_data = Song.query.filter_by(id=4).first()
song_data.title = '변경된제목'
db.session.add(song_data)
db.session.commit()
# 데이터 삭제하기
delete_data = Song.query.filter_by(id=4).first()
db.session.delete(delete_data)
db.session.commit()