혼자 공부하며 정리한 거라 두서 없음.
[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
로 하면 된다.
'개발' 카테고리의 다른 글
동기 비동기/ blocking nonblocking 개념 (0) | 2021.07.29 |
---|---|
[python] socket과 multi-thread (0) | 2021.07.28 |
Redis 시작하기, 명령어, flask와 연동 (0) | 2021.07.16 |
[Flask-2]개발 시작하기 - 애플리케이션 팩토리, 블루프린트 (0) | 2021.07.13 |
[Flask-1]개발 환경 setting (0) | 2021.07.13 |
댓글