일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로그래머스
- API
- 내일배움캠프
- Riot
- 그리디
- 백준
- github
- SQL
- 그리디알고리즘
- 파이썬
- 롤
- drf
- 장고
- lol
- 코딩테스트준비
- 코딩테스트
- 라이엇
- 리그오브레전드
- Django
- 스파르타내일배움캠프
- programmers
- python
- 알고리즘
- sort
- 자바
- java
- greedy
- 탐욕알고리즘
- git
- 스파르타내일배움캠프TIL
- Today
- Total
Lina's Toolbox
[스파르타 내일배움캠프 AI웹개발 과정] 4일차 복습/db연동 본문
URL 주소에서 데이터 가져오기
#app.py
@app.route("/iloveyou/<name>/")
def iloveyou(name)
motto = f"{name}야 난 너뿐이야!"
content = {
'name' : name,
'motto' : motto,
}
url에서 <변수명>으로 보낸 변수를
f"{변수}"로 사용 가능하다
페이지 이동 기능
<!-- html 파일 -->
href = "{{url_for('home')}}"
* url_for : 경로 지정
DB란
DB도 하나의 파일임. 이 파일을 열어보기 위한 프로그램(RDBMS)을 설치해야한다.
DB의 종류
1. SQL(RDBMS): excel과 유사하게 테이블(표) 형태로 데이터 저장. 표 형태로 깔끔. 데이터 오류가 낮고 일관성이 높지만, 그러므로 중간에 데이터를 더하거나 빼는 게 어렵다
2. NoSQL: 딕셔너리(키:밸류) 형태로 데이터 저장하므로 매우 자유롭고 하나하나 얽매이지 않음. 변화가 많아도 대응이 가능하므로 변화가 많은 스타트업에서 많이 사용한다.
ex. MongoDB
SQLite
- 작지만 빠르고 탄탄하여
- 전세계적으로 가장 많이 사용되는 데이터베이스 중 하나
- Python에 내장되어 있어 별도의 설치가 필요 없어 VScode에서 파일이름.db 형식으로 파일을 만들기만 하면 손쉽게 사용 가능
- 보통 SQL 사용하지만 ORM(쉽게 얘기하자면 프로그래밍 언어)로도 다룰 수 있다.
SQLite3 Editor 확장 프로그램 설치하기
SQLite3 Editor 기본값으로 설정
현재 폴더에서 database.db 파일 생성 후 연결 프로그램 SQLite3 Editor 기본값으로 설정 후 database.db 다시 삭제
설치 방법
1. Flask 구조의 폴더 생성 및 가상 환경 실행
|— venv
|—app.py(서버)
|— database.db (데이터베이스)
+ 가상환경 활성화 해줌
2. Flask-SQLAlchemy 설치
pip install Flask-SQLAlchemy
(Flask 애플리케이션에서 SQLAlchemy를 쉽게 사용할 수 있도록 도와주는 확장 패키지)
* SQLAlchemy : Python의 ORM 라이브러리
3. app.py에 Flask와 Database를 연결하는 코드 작성
# 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)
4. 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()
5. 테이블 만들기
(venv)가 있는지 확인!
$ flask shell (엔터)
* Flash shell 에서 나오는 방법
Ctrl + D: 터미널에서 Ctrl 키와 D 키를 동시에 누릅니다. 이는 현재의 쉘 세션을 종료하는 명령입니다.
exit() 명령어 사용: exit()을 입력하고 Enter 키를 누릅니다.
quit() 명령어 사용: quit()을 입력하고 Enter 키를 누릅니다.
DB 생성
>>> from app import db, Song (엔터)
>>> db.create_all()
만약 테이블을 없애고 싶다면 db.drop_all()
SQLAlchemy로 Database 조작하기
- Database에 데이터 넣기
Flask shell 켜져있는 지 확인 후
song = Song(username="추천자", title="노래제목",
artist="가수", image_url="이미지 주소")
db.session.add(song)
db.session.commit()
add: DB에 올림
commit: DB에 저장
- Database에 있는 모든 데이터를 조회하기
데이터 표시 형식은 우리가 class Song에서 설정해둔 대로 나오게 된다.
테이블이름.query.all() 실행
>>> Song.query.all()
Database에서 가져온 데이터 리스트 형식으로 사용
>>> song_list = Song.query.all()
>>> song_list[0] # 가수:노래제목 추천 by 추천자
테이블명.query.all() : DB의 모든 데이터가 리스트 형식으로 (넣어주는 변수에) 들어감
넣어준 리스트[0] : 첫번째로 넣은 데이터가 나옴
딕셔너리를 사용하는 것처럼 속성 값을 통해 원하는 데이터를 가져올 수 있음
>>> song_list[0].title # 노래 제목
특정 조건으로 데이터 가져오기
Song.query.filter_by(username='추천자').all()
# [가수:노래제목 추천 by 추천자, 가수1:노래제목1 추천 by 추천자]
테이블명.query.filter_by(필드명='조건값').all() 로 조건에 맞는 데이터를 전부 가져온다.
원하는 데이터를 1개 가져오려면 .first() 사용
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()
수정 후 꼭 add() 와 db.session.commit() 해주기!!
데이터 삭제
delete_data = Song.query.filter_by(id=4).first()
db.session.delete(delete_data)
db.session.commit()
수정과 마찬가지로 db.session.commit()를 해줘야 반영됨.
# 데이터를 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()
파이썬 으로 db 연동 재밌다!!
자바보다 훨씬 간단해서 너무 좋다.
진도가 빨라서 좋음! 처음했으면 어땠을 지 모르겠는데
강의진도가 나에게 딱 맞는 속도라 좋다.
'스파르타 내일 배움 캠프 AI 웹개발 과정 > python' 카테고리의 다른 글
스파르타 내일 배움 캠프 AI웹개발 | 파이썬 팀 과제 / 클래스 인스턴스(객체) 활용 (0) | 2024.07.04 |
---|---|
스파르타 내일배움캠프 AI웹개발 과정 | 6일차 복습/Pycharm 설치 (2) | 2024.07.01 |
Pythonanywhere로 내 코드 배포하기 (0) | 2024.06.28 |
파이썬 Flask 활용해 DB 연동하기 (SQLite) (0) | 2024.06.28 |
[스파르타 내일배움캠프_AI웹개발 과정] 3일차 복습/ Python, flask (0) | 2024.06.26 |