ORM(Object Relational Mapping)
데이터베이스에, 데이터를 저장하는 테이블을 파이썬 클래스로 만들어 관리하는 기술
[ORM을 이용한 새 데이터 삽입 예] |
question1 = Question(subject=’안녕하세요’, content='가입 인사드립니다 ^^') |
코드에서 Question은 파이썬 클래스이며, 이처럼 데이터를 관리하는데 사용하는 ORM클래스를 "모델"이라고 한다.
모델을 사용하려면, ORM 라이브러리를 설치해야함. 이는 교재(2-04)를 확인하자.
ORM적용 to <__init__.py>
create_app함수 밖에 db = SQLAlchemy() //객체 생성
migrate = Migrate() //이렇게 해야 db객체를 다른 모듈(다른 파일)에서 사용가능.
create_app함수 안에 db.init_app(app) //객체 앱(create_app)에 등록.
migrate.init_app(app, db)
데이터베이스 초기화하기; flask db init
질문,답변 모델 생성 in <models.py>
from pybo 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'))
question = db.relationship('Question', backref=db.backref('answer_set'))
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)
|
ondelete='CASCADE'는 참조하는 키가 삭제돠면 해당 모델도 자동으로 삭제시키는 설정임. (쿼리를 이용할때만 삭제됨. 파이썬코드로 삭제하는 법은 교재(2-04) 참고)
db.relationship('Question', backref=db.backref('answer_set') 은 question의 모든 정보를 연동한다는 뜻임. Answer모델에서 Question의 attribute를 조회가능.
backref기능은 역참조도 가능케함. Question모델에서 Answer모델을 조회가능케함. answer_set를 통해서.(backref()의 괄호 안의 문자열을 통해 참조)
만든 모델을 이용해 테이블 생성
1. __init__.py에 "from . import modles" 코드 추가(model을 init.py에 가져옴)
2. cmd에서 "flask db migrate"명령 수행 -> 리비전 파일(데이터베이스 변경 작업을 위한 파일) 생성
3. cmd에서 "flask db-upgrade"명령 수행->리비전 파일 실행 ->pybo.db파일, 즉 만든 모델을 바탕으로 데이터베이스 테이블이 자동으로 생성됨.
ㄴ약간 이런 느낌. db,migrate로 틀을 만들고 모델로 틀에 내용을 채우고 cmd명령어로 내용채운 틀로 붕어빵이라는 결과물을 만들어내는 느낌. 이렇게 이해?라기보다는 암기하면 과정이 자연스럽게 익혀질듯
이렇게 데이터베이스를 만들고 나면
flask shell명령을 통해
객체(인스턴스)를 자유롭게 생성, 조회, 수정, 삭제, 탐색이 가능함. 이에 대한 자세한 내용은 교재(2-04)참고.
'웹개발 > [점프 투 플라스크]' 카테고리의 다른 글
[점프 투 플라스크] 부트스트랩으로 화면 꾸미기 & 템플릿 상속 with 표준HTML (0) | 2024.04.10 |
---|---|
[점프 투 플라스크] 답변 등록 기능 만들기 (0) | 2024.04.10 |
[점프 투 플라스크] 질문 목록, 질문 상세 기능 만들기 및 블루프린트로 기능 분리하기 & url_for (0) | 2024.04.10 |
[점프 투 플라스크] 블루프린트 (0) | 2024.04.09 |
[점프 투 플라스크] 파이썬 가상환경, 배치파일 (0) | 2024.03.23 |