python-flask / 3. flask와 Sqlite 준비

dothouse·2024년 1월 28일

python_flask

목록 보기
4/11

0. 데이터 관리하기

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

1) ORM

추천에 사용하기 위한 데이터와 사용자 선택 결과를 관리하기 위해서 sql을 활용
이를 위해 파이썬 클래스와 유사한 형태로 모델을 관리

https://wikidocs.net/81045 참조
2-04 모델로 처리하기

1. Flask ORM활용하기

1) library 추가

가상환경에서 flask-migrate 추가

(jeju) d:\song\project1_practice\web> pip install flask-migrate

2) config 설정

[파일명]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형태로 변경 필요
연습과정에서 간단히 설정

3) Flask에 적용

위의 과정을 통해 준비는 다했고, 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

4) 데이터 베이스 초기화

cmd창
(jeju) d:\song\practice\project1\web>flask db init

를 통해서 데이터 베이스 초기화

5) 모델 설정

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생성

6) 모델 수정 해야할 일 2가지

1) __init__.py 파일 수정

[파일명]d:\song\project1_practice\web\__init__.py

    # DB
    db.init_app(app)
    migrate.init_app(app, db)
    
    # 추가사항
    from . import models

✅ ORM 부분에 사용한 모델들을 불러온다.

2) flask db upgrade

1️⃣

cmd창
(jeju) d:\song\practice\project1\web>flask db migrate

를 통해서 데이터 베이스 초기화

2️⃣

cmd창
(jeju) d:\song\practice\project1\web>flask db upgrade

7) 데이터 조회 Sqlite

SQLite를 다운받기

https://www.sqlite.org/index.html

a. db 불러오기

b. table 형태보기

c. table 데이터 보기

2. 특이사항

❓ 모델 활용하는 연습은 select2를 만들면서 진행

❓ 사용할 테이블이 추가되거나 수정 될때마다 5/6/7 단계 계속 수행

profile
새로운 길

0개의 댓글