본문 바로가기
Flask/웹개발

[GPT] 웹개발 4주차 | Flask & DB

by jungmin.park 2023. 10. 15.

Flask 폴더 구조

Project 폴더 구조
- - -
Project
|— venv
|— app.py (서버)
|— templates
      |— motto.html (클라이언트 파일)
      |— music.html (클라이언트 파일)

1. URL 주소에서 데이터 가져오기

 ex) 인스타그램 주소에 따라서 데이터가 변경됨.

https://www.instagram.com/iamrtanny/  -> 르타니 계정

https://www.instagram.com/jung_mmmmin  -> 내 계정

* 주소에 따라 메인 화면 인사말 바꾸기

@app.route("/iloveyou/<name>/") -> 이곳의 name 과
def iloveyou(name): -> name을 받아서 쓰는 것

    motto = f"{name}야 난 너뿐이야..."
    context = {
        "name": name,
        "motto": motto
    }

    return render_template("motto.html", data=context)

 

DB 시작

1. 들어가기전

vscode에서 SQLite3 Editor VScode Extension 설치

* SQLite 설정하기

   - database.db 파일 생성

Project 폴더 구조
- - -
Project
|— venv
|— app.py (서버)
|— templates
      |— motto.html (클라이언트 파일)
      |— music.html (클라이언트 파일)
 |— database.db

  - database.db 파일 위에서 오른쪽 클릭

  - 메뉴 open with 클릭

  - 기본 설정 변경 : Configure default editor fot *.db... 메뉴 클릭

  - SQLite3 Editor를 선택

  - database.db 다시 열어 Query Editor 있는지 확인

 

2. SQLAlchemy로 Database 연결하기 & 테이블 만들기

pip install Flask-SQLAlchemy

 * app.py 준비 : Flask와 Database를 연결하는 코드

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)

* app.py에서 데이터베이스 모델 정의

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()

추천자(username), 가수(artist), 노래 제목(title), 포스터 주소(image_url) 칼럼 생성

* Database 활성화

>>> from app import db, Song (엔터)
>>> db.create_all()

* Database에 데이터 넣기

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] # 가수:노래제목 추천 by 추천자
>>> song_list[0].title # 딕셔너리를 사용하는 것처럼 속성 값을 통해 원하는 데이터를 가져올 수 있다.

* 특정 조건으로 데이터 가져오기

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

* 데이터 수정하기

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()

'Flask > 웹개발' 카테고리의 다른 글

[GPT] 웹개발 3주차 | Python  (0) 2023.10.15
[GPT] 웹개발 2주차 | Javascript&JQuery  (1) 2023.10.15
[GPT] 웹개발 1주차 | HTML&CSS  (0) 2023.10.15