ORMモデルの使用


フラスコにORMライブラリを使う


Flask-migrateをインストールし、最も代表的なSQLAlchemyとPythonモデルを使用してデータを処理します.
# Flask-Migrate만 깔아도 SQLAlchemy가 설치됨
pip install Flask-Migrate

問題モデルの作成

# models.py
from sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Question(db.Model):
    id = db.Column(db.Integer, primary_key=True) # 질문ID
    subject = db.Column(db.String(200), nullable=False) # 제목
    content = db.Column(db.Text(), nullable=False) # 내용
    create_date = db.Column(db.DateTime(), nullable=False) # 생성 날짜
上記のようなQuestionクラスを作成します.db.Columnを使用してカラムを定義できます.

回答モデルの作成

# models.py

...

#-----------------------------------------------#
class Answer(db.Model):
    id = db.Column(db.Integer, primary_key=True) # 답변ID
    question_id = db.Column(db.Integer, db.ForeignKey('question.id', ondelete='CASCADE')) # 답변에 해당하는 질문의 ID
    question = db.relationship('Question', backref=db.backref('answer_set')) # 역참조 설정
    content = db.Column(db.Text(), nullable=False) # 답변내용
    create_date = db.Column(db.DateTime(), nullable=False) # 생성 시간
回答は特定の質問に対する回答であるため,質問表の情報と一定の関連があるはずである.
dbは、ある属性を既存のモデルに関連付けるために使用されます.ForeignKeyの使用
また、ondeleteではバインドの削除も設定されています
特定の質問を削除すると、関連する回答もすべて削除されます.
# 모델을 추가했으므로, 데이터 베이스 적용
flask db migrate

# 실행
flask db upgrade
実行時に次のdbファイルが生成されます.

モデルの操作


フラスコシェルに接続
$ flask shell
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
App: app [production]
Instance: /home/sunbean/venv/var/app-instance
>>>
既存のQuestion、Answerモデルを呼び出して問題オブジェクトを作成します.
>>> from app.models import Question, Answer
>>> from datetime import datetime
>>> q = Question(subject='첫번쨰 질문이에용', content='안녕하세요!', create_date=datetime.now())
>>>
問題オブジェクトを作成したら、dbオブジェクトを作成して保存する必要があります.
>>> from app import db
>>> db.session.add(q)
>>> db.session.commit()
db.セッションは、データベースに関連付けられたセッションを表します.このセッションはデータベース処理に使用する必要があります