git : https://github.com/dothouse/practice/tree/master/project1/web
Tool : python / python-flask / html /javascript / css
✅사용 파일
D:\song\practice\project1\web\jeju\__init__.py
https://github.com/dothouse/project1/blob/master/web/jeju/__init__.py
D:\song\practice\project1\web\jeju\config.py
https://github.com/dothouse/project1/blob/master/web/jeju/config.py
D:\song\practice\project1\web\jeju\model.py
https://github.com/dothouse/project1/blob/master/web/jeju/models.py
추천에 사용하기 위한 데이터와 사용자 선택 결과를 관리하기 위해서 sql을 활용
이를 위해 파이썬 클래스와 유사한 형태로 모델을 관리
https://wikidocs.net/81045 참조
2-04 모델로 처리하기
가상환경에서 flask-migrate 추가
(jeju) d:\song\project1_practice\web> pip install flask-migrate
[파일명]d:\song\project1_practice\web\config.py
import os
BASE_DIR = os.path.dirname(__file__)
SQLALCHEMY_DATABASE_URI = 'sqlite:///{}'.format(os.path.join(BASE_DIR, 'jeju.db'))
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = 'dev'
✅SQLALCHEMY_DATABASE_URI - db파일 경로
sqlite를 활용하여 base folder [파일명]d:\song\project1_practice\jeju.db 라는 파일에 연결하여 사용하겠다.
✅ SQLALCHEMY_TRACK_MODIFICATIONS - SQLAlchemy의 이벤트를 처리
우선 은 False
✅ SECRET_KEY - 보안 키
보안을 위한 key로 향후 서비스시 hash형태로 변경 필요
연습과정에서 간단히 설정
위의 과정을 통해 준비는 다했고, Flask에 적용할 단계
Flask에 적용하기 위해 가장 뼈대를 다루는 파일인 __init__.py 파일에 ORM 설정 추가
[파일명]d:\song\project1_practice\web\__init__.py
from flask import Flask
### sql 부분 -> 추가
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
import config
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
### sql 기본설정 부분 -> 추가
app.config.from_object(config)
# DB -> 추가
db.init_app(app)
migrate.init_app(app, db)
# blueprint
from .views import main_views, select1_views,
app.register_blueprint(main_views.bp)
app.register_blueprint(select1_views.bp)
return app
✅ config
import config app.config.from_object(config)
✅ SQLAlchemy - library 관련 설정(명령어 사용 편하게 하기 위해)
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
migrate = Migrate()
✅ app과 db연결
db.init_app(app)
migrate.init_app(app, db)
from . import models
cmd창
(jeju) d:\song\practice\project1\web>flask db init
를 통해서 데이터 베이스 초기화
sql에 선택된 값들을 저장하기 위한 Table을 미리 만들어 둔다.
✅ sql의 문법을 사용
✅ 파이썬의 class를 활용(정답은 아니지만... 이해를 쉽게하기 위해)
from jeju import db
class selectData(db.Model):
id = db.Column(db.Integer, primary_key=True)
month = db.Column(db.INT, nullable=False)
month_str= db.Column(db.String(200), nullable=False)
spot1 = db.Column(db.INT, nullable=False)
spot1_str= db.Column(db.String(200), nullable=False)
spot2 = db.Column(db.INT, nullable=False)
spot2_str= db.Column(db.String(200), nullable=False)
food = db.Column(db.INT, nullable=False)
food_str= db.Column(db.String(200), nullable=False)
pet = db.Column(db.INT, nullable=False)
pet_str = db.Column(db.String(200), nullable=False)
pool = db.Column(db.INT, nullable=False)
garden = db.Column(db.INT, nullable=False)
sea = db.Column(db.INT, nullable=False)
nocost = db.Column(db.INT, nullable=False)
bus = db.Column(db.INT, nullable=False)
police = db.Column(db.INT, nullable=False)
hospital = db.Column(db.INT, nullable=False)
bank = db.Column(db.INT, nullable=False)
mart = db.Column(db.INT, nullable=False)
gift = db.Column(db.INT, nullable=False)
✅ from jeju import db
[파일명]d:\song\project1_practice\web\jeju.db 를 사용하겠다.
✅ Table 생성
class SelectData(db.Model): id = db.Column(db.Integer, primary_key=True) month = db.Column(db.INT, nullable=False) # ... 생략SelectData 란 이름의 Table을 만들고 사용
id = db.Column(db.Integer, primary_key=True)를 통해 Table의 column생성
__init__.py 파일 수정[파일명]d:\song\project1_practice\web\__init__.py
# DB
db.init_app(app)
migrate.init_app(app, db)
# 추가사항
from . import models
✅ ORM 부분에 사용한 모델들을 불러온다.
1️⃣
cmd창
(jeju) d:\song\practice\project1\web>flask db migrate
를 통해서 데이터 베이스 초기화
2️⃣
cmd창
(jeju) d:\song\practice\project1\web>flask db upgrade
SQLite를 다운받기
❓ 모델 활용하는 연습은 select2를 만들면서 진행
❓ 사용할 테이블이 추가되거나 수정 될때마다 5/6/7 단계 계속 수행