TIL

1주차 Day4. DB, SQLite

ekdud 2024. 6. 27. 15:24

Database

: Index라는 순서로 데이터들을 정렬시켜 저장해놓음. 일반적으로 파일로 저장됨.

이 파일(DB)을 열어보기 위한 프로그램이 아래 RDBMS 또는 NoSQL.

 

1) SQL(RDBMS) - 행/열의 생김새가 정해진 Excel에 데이터를 저장하는 것과 유사. 정형화됨.

ex. SQLite, MS-SQL, My-SQL 등

 

2) NoSQL - 딕셔너리 형태로 데이터를 저장해두는 DB. 자유로운 형태의 데이터 적재.

ex. MongoDB

 


실습

- 우선 SQLite3 Editor 확장 프로그램을 설치하고 환경설정을 해줘야함.

-  database.db 파일 생성 후 해당 파일을 마우스 우클릭, 연결 프로그램.. 클릭

- .db에 대한 기본 편집기 구성.. 클릭, SQLite3 Editor 클릭.

- database.db창 닫은 후 database.db 파일 삭제.

 

이제 사용하기 !

- 명령팔레트 열고 가상환경 만들기.

- 라이브러리 설치 pip install Flask-SQLAlchemy

- app.py 파일 생성.

- database.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)

 

이 아래에 설계도 작성.

예를 들어, 노래에 대한 데이터를 저장하고자 하는 경우 다음과 같이 작성.

class Song(db.Model):   #설계도. Song이라는 이름의 시트가 만들어진다.
    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()

 

- 이제부터 터미널에서 작성 !!!

 

[테이블 만들기]

flask shell

>>> from app import db, Song 
>>> db.create_all()                            반대로, 테이블을 없애고 싶다면 db.drop_all()

터미널 창

 

코드가 바르게 실행된 경우. 시트가 생성된다.

 

이제 데이터를 집어넣는다.

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.session.add(song1)
db.session.add(song2)
db.session.add(song3)

db.session.commit()

 

- 모든 결과값 보기 → 테이블이름.query.all()

- 리스트 형식으로도 사용 가능! 

song_list = Song.query.all()
song_list[0]
song_list[0].title

 

- 특정 조건으로 데이터 가져오기 테이블이름.query.filter_by(username='추천자').all()

- 데이터 1개 가져오기 테이블이름.query.filter_by(id=번호).first()

- 데이터 수정하기  db.session.add(데이터)

- 데이터 삭제하기   delete_data = Song.query.filter_by(id=4).first()

                                   db.session.delete(delete_data)

 

- db.session.commit() 도 잊지말고 변경이 일어날 때마다 해주기.