본문 바로가기
개발

[Flask-3]ORM 라이브러리 이용해 DB 연동

by meanjung 2021. 7. 13.

혼자 공부하며 정리한 거라 두서 없음.

[https://wikidocs.net/81045] 이거 보면서 공부했음


ORM이란?

Object-Relational-Mapping

DB객체를 객체지향 프로그래밍 언어로 변환하는 기법

 

Flask에서 ORM을 구현할 수 있게 해주는 라이브러리

SQLAlchemy

 

pip install Flask-Migrate 하면 ORM 라이브러리인 SQLAlchemy, alembic도 함께 설치된다. 또한 python model을 이용해 테이블을 생성하고 컬럼을 추가할 수 있다. 

pip install pymysql도 함께 설치

 

"""

코드는 [https://wikidocs.net/81045] 참조

"""

 

.

.

- flask db init

db 초기화

db를 관리하는 초기 파일들을 migrates라는 디렉터리에 자동으로 생성해준다.

이때 생성되는 파일들은 flask-migrate 라이브러리에서 사용된다. 우리는 이 파일에 대해 알 필요가 없다.

최초 한 번만 수행하면 된다!

 

모델을 추가하거나 변경할 때는 flask db migrate, flask db upgrade 명령만 사용한다. 다음 두 명령만 기억하면 된다!

- flask db migrate

모델을 새로 생성하거나 변경할 때

 

- flask db upgrade

모델의 변경 내용을 실제 db에 적용할 때

이 명령어를 실행해야 db에 테이블이 생성된다.

 

 

models.py

코드는 너무 길어져서 안 올렸지만, models파일은 vscode에서 메서드 자동완성 안되길래 이렇게 하는 것이다, 알아두려고 올린다.

(from app import db 빼고 참조한 링크와 동일한 코드이다.)

from app import db

class Question(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    subject = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text(), nullable=False)
    create_date = db.Column(db.DateTime(), nullable=False)

class Answer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    question_id = db.Column(db.Integer, db.ForeignKey('question.id', ondelete='CASCADE')) # CASCADE 삭제 연동 설정; 질문 삭제하면 딸린 답변도 삭제된다.
    question = db.relationship('Question', backref=db.backref('answer_set'))
    content = db.Column(db.Text(), nullable=False)
    create_date = db.Column(db.DateTime(), nullable=False)

1. Answer class의 question은 answer 모델에서 question 모델을 참조하기 위한 것이다.

2. SQLAlchemy will automatically set the first Integer PK column that's not marked as a FK as autoincrement=True

sqlalchemy는 foreign key로 설정되지 않은 첫 번째 정수 primary key column을 auto increment로 자동 지정한다.그러므로, question과 answer class의 id는 모두 값을 insert할 때 지정해주지 않아도 자동 생성될 것이다.

 


기본적으로 대충 틀과 기본은 잡았다.이제 내가 할 프로젝트의 db modeling을 하고, 기능을 명확히 한 후, 구글링^^하면서 개발하면 되겠당

 


개발 환경이 ubuntu라면

flask db init

flask db migrate

flask db upgrade

명령이 안 먹을 수도 있다.

 

그때는 

python3 -m flask db init

python3 -m flask db migrate

python3 -m flask db upgrade

로 하면 된다.

 

 

 

 

 

댓글