TIL 240118

hyeo71·2024년 1월 18일
0

2024 내배캠 AI 트랙

목록 보기
9/108

오늘 공부

  • 주소에서 데이터 가져오기
  • DB
  • Flask shell, ORM
  • SQL 66~70

주소에서 데이터 가져오기

@app.route("/address/<name>/")
def address(name):

    description = f"{name}의 집입니다."
    context = {
        "name": name,
        "description": description
    }

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

브라우저 주소창에 .../address/aaa와 같이 입력하면 <name> = aaa
가 되고 이를 매개변수로 넘겨주면 코드에서 해당 데이터를 사용할 수 있다.


DB

DB의 종류

  • RDBMS(SQL)
    엑셀과 같이 행/열이 존재하는 표처럼 데이터를 저장하는 방식의 DB
    데이터의 일관성이나 분석에 용이 (SQLite, MsSQL, MySQL)

  • No-SQL
    딕셔너리 형태로 데이터를 저장하는 DB
    데이터 각각의 타입을 맞출 필요없어 자유로운 형태로 사용가능 (MongoDB)

Flask + SQLite

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

ORM(Object Relation Mapping)

어플리케이션과 DB 연결 시 SQL이 아닌 개발언어로 DB에 접근할 수 있게 해주는 기능

ORM을 사용한 테이블 생성 코드

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

shell을 사용한 DB 관리

flask shell을 터미널에 입력하여 CLI shell로 들어가기

테이블 만들기/삭제

from app import db

# 테이블 만들기
db.create_all()

# 테이블 삭제하기
db.drop_all()

데이터 조작하기

# 데이터를 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()

SQL 66~70

0개의 댓글