ORM 모델 다뤄보기

다 먼지같은 일입니다·2021년 5월 25일
0

플라스크에서 ORM 라이브러리를 사용

가장 대표적으로 사용되는 SQLAlchemy와 파이썬 모델을 이용해 데이터를 다룰수 있게 해주는 flask-migrate 를 설치

# 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) # 생성 시간

답변은 특정 질문에 대한 답을 하는 것이기 때문에 Question 테이블의 정보와 어느정도 연계 되어야 한다.

어떤 속성을 기존 모델과 연결하기 위해서 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.session은 데이터베이스와 연결된 세션을 의미한다. 데이터베이스 처리를 위해서는 반드시 이 세션이 필요함

0개의 댓글