DB(DataBase) 연결

summereuna🐥·2024년 6월 10일
0

Python

목록 보기
8/8

1. Database를 왜 쓸까?


방 정리를 하는 이유는?

  • 잘 넣어두기 위해서
  • 나중에 잘 찾기 위해

교보문고에 가서 책을 찾으려면?

  • 책이 꽂힌 방법대로 찾아야 쉽게 찾을 수 있다.
  • 섹션 > 출판사 > 책 제목

우리 눈에 보이진 않지만, 사실 Database에는 Index라는 순서대로 데이터들이 정렬되어 있다.


2. DB의 두 종류 (SQL vs NoSQL)


1. RDBMS(SQL)


행/열의 생김새가 정해진 테이블 형태로, Excel에 데이터를 저장하는 것과 유사하다.
데이터 50만 개가 적재된 상태에서 갑자기 중간에 열을 하나 더하기는 어렵다.
그러나 정형화되어 있는 만큼 오류가 적고 데이터의 일관성이나 분석에 용이할 수 있습니다.

  • ex) SQLite, MS-SQL, My-SQL 등

2. No-SQL


딕셔너리 형태로 데이터를 저장해두는 Database이다.
따라서 데이터 하나 하나 마다 같은 값들을 가질 필요가 없다.
자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.
변화가 잦은 스타트업에서 주로 사용한다고 한다.

  • ex) MongoDB

3. Database의 실체


Database의 실체는 무엇일까?

아주 간단하게, 데이터베이스는 일반적으로 파일로 저장된다.
그리고 그 파일을 열어보기 위한 프로그램(RDBMS)을 설치하는 것이 필요하다.

  • (예시) 데이터가 저장된 엑셀 파일을 열기 위해서는 엑셀 프로그램을 설치해야 한다. Excel 파일(데이터베이스)와 Excel 프로그램(RDBMS)라고 이해하면 된다.

4. SQLite


데이터 베이스 중 하나인 SQLite도 하나의 파일로 이루어져 있다.

  • 빠르게 Database를 학습하기 위해서 별도 프로그램은 설치하지 않고, SQLite3 Editor VScode Extension을 설치해서 SQLite를 사용해보자.

4-1. SQLite3 Editor VScode Extension 설치 후 SQLite 설정


  1. 환경 설정을 위해 현재 폴더에 database.db 파일 생성 (환경 설정 후 삭제하면 된다)

  2. 파일 우클릭

  3. open with 클릭

  4. 기본 설정 변경 위해 Configure default editor fot *.db … 클릭

  5. SQLite3 Editor 선택

  6. database.db 파일 선택 시 아래 화면이 나오면 설정 완료

  7. Sqlite 확장 프로그램을 사용하면, 아래처럼 바로 데이터를 수정할 수도 있다.

4-2. SQLite란?


작지만 빠르고 탄탄하므로 SQLite는 세계에서 가장 많이 사용되는 데이터베이스 중 하나이다.

  • Python에는 기본적으로 SQLite가 내장되어 있으므로 별도 설치 없이 VScode에서 파일이름.db 형식으로 파일을 만들기만 하면 손쉽게 사용할 수 있다.

ORM(Object Relational Mapping, 객체-관계 매핑)이란?


SQLite와 같은 데이터베이스에서 데이터를 다루기 위해서는 보통 SQL을 사용해야 하지만, ORM을 사용하면 SQL을 사용하는 것보다 손쉽게 데이터베이스를 다룰 수 있다.

ORM(Object Relational Mapping, 객체-관계 매핑)객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

  • 객체 지향 프로그래밍은 클래스를 사용하고,
    관계형 데이터베이스는 테이블을 사용하기 때문에,
    객체 모델과 관계형 모델 간에 불일치가 존재한다.
  • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결할 수 있다.

    📚 참고한 블로그

간단하게 가자면, ORM프로그래밍 언어(지금은 Python)로 데이터베이스를 다루는 방법이라고 알아두면 된다.


5. 🔥 DB세팅: SQLAlchemy로 Database 연결 & 테이블 만들기


Python으로 SQLAlchemy를 다루려면 가상 환경을 세팅해야 한다.

5-1. SQLAlchemy로 Database 연결하기


1. DB 폴더 생성, 가상 환경 설치, 파일 생성


🔥 DB 폴더 구조

DB 폴더 구조
- - -
DB
|— venv (✅ 가상환경)
|— app.py (✅ 서버)
|— database.db (✅ 데이터베이스)

DB 폴더구조도 규칙 정해진대로!

2. Flask-SQLAlchemy 패키지 설치


  • pip install Flask-SQLAlchemy 로 패키지 설치
    SQLAlchemy를 사용하면 파이썬 코드로 SQL 데이터 베이스를 다룰 수 있다.

  • pip list로 어떤 패키지가 다운 받아져 있는지 확인 가능

3. 📍 app.py 에 Flask와 Database를 연결하는 코드를 작성


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)

4. 📍 app.py에 데이터베이스 모델 정의하기


1. 내가 만들 노래 공유 사이트에 필요한 데이터

  • 추천자(username)
  • 가수(artist)
  • 노래 제목(title)
  • 포스터 주소(image_url)

2. 필요한 데이터를 넣은 Song 모델을 만들면, Song 이라는 이름의 시트가 만들어 진다.

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 파일의 설계도를 만든 것이라고 생각하면 된다.

  • 훑으면서 나가는 거니까 챗 지피티한테 물어보면서...


5-2. Song 모델 바탕으로 DB 테이블 만들기


1. 가상 환경 활성화하기

  • 먼저 가상 환경을 활성화하고, 터미널을 켜고 가상환경 활성화 되어 있는지 확인한다.
  • 가상 환경은 source venv/Scripts/activate 로 활성화할 수 있다.

2. flask shell로 (venv)가 있는지 확인한다.

  • 터미널에 flask shell를 입력한다.

3. shell을 입력하여 테이블을 만들거나 없앤다.

>>> from app import db, Song (엔터)
>>> db.create_all()
  • 테이블(시트) 만들기:db.create_all()
  • 테이블을 없애기: db.drop_all()

4. 테이블 만들어 졌는지 확인하기

  • database.db 파일을 클릭했을 때 아래와 같이 원하는 데이터가 테이블에 들어가 있으면 된다.

6. SQLAlchemy로 Database 조작하기


6-1. Database에 데이터 넣기


1. 데이터 하나 넣기

  1. 터미널에서 flask shell이 켜져 있는지 확인하고,
  1. 아래 코드스니펫을 붙여 넣어 보자.
# ✅ 데이터 만들기
song = Song(username="추천자", title="노래제목", 
            artist="가수", image_url="이미지 주소")
            
# ✅ DB에 데이터 업로드
db.session.add(song)

# ✅ DB에 데이터 저장
db.session.commit()
  1. 테이블로 데이터가 들어간 것을 확인할 수 있다.

2. 데이터 여러개 넣기

# ✅ 데이터 여러개 만들기
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()

6-2. 데이터 조회하고 가져오기


터미널 flask shell에 테이블이름.query.all() 을 실행하면 Database에 있는 모든 데이터를 조회할 수 있다.

Song.query.all()

조회한 결과는 리스트 형식으로 들어가 있다.

  • 데이터가 표시되는 형식은 class Song에서 설정해둔 대로 나온다.

DB에서 가져온 데이터는 리스트 형식으로 사용할 수 있다.

  • 첫 번째 데이터 가져오기
>>> song_list = Song.query.all()
>>> song_list[0] # 가수:노래제목 추천 by 추천자
  • 딕셔너리를 사용하는 것처럼 속성 값을 통해 원하는 데이터를 가져올 수도 있다.
>>> song_list[0].title # 노래 제목

6-3. 특정 조건으로 데이터 가져오기


Song.query.filter_by(조건).all() 을 사용하면 조건에 맞는 데이터를 전부 가져올 수 있다.

Song.query.filter_by(username='추천자').all()
# [가수:노래제목 추천 by 추천자, 가수1:노래제목1 추천 by 추천자]

원하는 데이터를 1개 가져오려면 .first() 를 써주면 된다.

Song.query.filter_by(id=1).first() # 가수2:노래제목2 추천 by 추천자
Song.query.filter_by(title='노래제목').first() # 가수:노래제목 추천 by 추천자

6-4. 데이터 수정하기


데이터를 가져오고, 파이썬에서 변수의 값을 변경하는 것처럼 수정하면 된다.

📌 수정 사항을 반영하기 위해서는 꼭
업로드 add()하고
저장 db.session.commit() 해줘야 한다!

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

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

6-5. 데이터 삭제하기


데이터 수정과 마찬가지로 데이터 1개를 들고 온 다음 db.session.delete()로 삭제 하면된다.

📌 데이터 삭제에 대한 사항을 반영하기 위해서는 꼭
저장 db.session.commit() 해줘야 한다!

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

6-6. 💡 SQLAlchemy DB 조작 요약


외우기보다는 원리를 파악하여 찾아서 사용하면 된다.
핵심은 데이터를 저장하고, 찾고, 바꾸고, 지우는 것이다.

# 데이터를 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()
profile
Always have hope🍀 & constant passion🔥

0개의 댓글