TIL_240128

라미·2024년 1월 28일

TIL

목록 보기
4/25
post-thumbnail

PJT 환경설정

1~3일차 배운것을 종합하여 PJT 생성.

  1. PJT 폴더 생성
  2. templates 폴더 생성 - motto.html, music.html 파일 생성
  3. app.py 파일 생성
  4. .venv 파이썬 가상 환경 생성
  5. flask install
#app.py
# 필수 라이브러리
'''
0. Flask : 웹서버를 시작할 수 있는 기능. app이라는 이름으로 플라스크를 시작한다
1. render_template : html파일을 가져와서 보여준다
'''
from flask import Flask, render_template
app = Flask(__name__)

@app.route("/")
def home():
    name = '라미'
    motto = '히히 사는게 왜이래'

    context = {
        "name" : name,
        "motto": motto,
    }
    return render_template('motto.html', data = context)

@app.route("/music")
def music():
    return render_template('music.html')

# 클라이언트에서 받은 요청 변수로 사용하기 <name> -> 매개변수로 전달 됨
@app.route("/iloveyou/<name>/")
def iloveyou(name):
    motto = f"{ name } 짱이야"

    context = {
        'name': name,
        'motto' : motto,
    }
    return render_template('motto.html', data=context)


if __name__ == "__main__":
    app.run(debug=True)

motto.html / music.html
flask url_for() 사용하여 navbar 메뉴 클릭시 페이지 이동 될 수 있도로 기능 추가

정상 동작 확인

motto.htmlmusic.html

DataBase

  • RDBMS(Relational Database management System)
  • No-SQL(Database Management System)
특성RDBMSNoSQL
데이터 모델정형화된 테이블 및 관계다양한 모델 (문서, 키-값, 열 지향 등)
스키마고정된 스키마유연한 스키마
트랜잭션ACID 트랜잭션 지원ACID를 완전히 보장하지 않는 경우가 많음
Query LanguageSQL데이터베이스마다 고유한 쿼리 언어 또는 SQL과 유사한 언어
확장성주로 수직 확장주로 수평 확장
프로젝트 유형복잡한 관계 및 정형 데이터대용량, 비정형 또는 다양한 형태의 데이터를 다루는 프로젝트

RDBMS 예시:

  1. MySQL
  2. PostgreSQL
  3. Oracle Database
  4. Microsoft SQL Server

NoSQL 예시:

  1. MongoDB (문서 지향)
  2. Cassandra (열 지향)
  3. Redis (키-값 저장소)
  4. Neo4j (그래프 데이터베이스)

SQLite

VSCode 확장설치

환경설정
pjt folder에 .db 파일 생성 - 우클릭 - 연결프로그램 - .db 에 대한 기본 편집기 구성 - SQLite3 Editor 클릭

SQLite란?

  • Python 기본 내장 db, vscode에서 별도 설치 없이 .db 형식으로 파일을 만들면 사용 가능하다.

SQLAlchemy로 db 연결 & 테이블 만들기
1) db 폴더 생성
2) 가상 환경 생성
3) app.py 파일 생성
4) database.db 파일 생성

Flask-SQLAlchemy 패키지 설치
터미널 : pip install Flask-SQLAlchemy 입력

#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):
    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 enter
from app import db, Song enter
db.create_all() enter

# column에 추가할 데이터 생성
song = Song(username="추천자", title="노래제목", artist="가수", image_url="이미지 주소") 
# 데이터 업로드
db.session.add(song)
# 업로드한 데이터 commit(저장)
db.session.commit()
#테이블 데이터 조회 : 테이블명.query.all() - 리스트 형태로 테이블 데이터 조회 가능
Song.query.all()
[가수 노래제목 추천 by 추천자, 가수1 노래제목1 추천 by 추천자, 가수2 노래제목2 추천 by 스파르타, 가수3 노래제목3 추천 by 스 파르타]
#테이블의 데이터에 접근하는 법
Song_list = Song.query.all()
song_list[0] #리스트를 변수로 저장하여 리스트 인덱스로 접근하여 데이터 확인
가수 노래제목 추천 by 추천자
song_list[0].title #list[].value로 각 column의 데이터에 접근 가능
'노래제목'
#특정 조건으로 데이터 가져오기 / 테이블명.query.filter_by(조건).all()
>> Song.query.filter_by(username='추천자').all() #username 이 추천자인 사람 모두 조회
[가수 노래제목 추천 by 추천자, 가수1 노래제목1 추천 by 추천자]
# 데이터 변경
# 변수에 변경할 데이터 담기
>> song_data = Song.query.filter_by(id=4).first()
# 변경할 데이터 변경
>> song_data.title = '제목변경'
# db에 업데이트
>> db.session.add(song_data)
# commit
>> db.session.commit()
# 정상변경 확인
>> Song.query.filter_by(id=4).first()
가수3 제목변경 추천 by 스파르타
#db 삭제
#삭제할 데이터 담기
>> delete_data = Song.query.filter_by(id=3).first()
# 세션에서 삭제
>> db.session.delete(delete_data)
# commit
>> db.session.commit()

0개의 댓글