본문 바로가기
기술스택을 쌓아보자/SQL

TIL 2022 05 10 - sqlalchemy의 cascade, relationship [TODAY I LEARN]

by 소리331 2022. 5. 11.
반응형

[TIL 2022 05 10]

 

오늘은 sqlalchemy의 cascade option을 사용하고, 관련 개념을 익혀보았다.

 

cascade적용하는법

  • cascade를 relationship()을 통해 지정한다.
  • relationship()의 첫번째 인자는 참조할 모델명이다.
  • cascade의 default는  save-update and merge 이기 때문에, delete나 delete-orphan은 지정해주어야한다.
class Order(Base):
    __tablename__ = 'order'

    items = relationship("Item", cascade="all, delete-orphan")
    customer = relationship("User", cascade="save-update")

backref란?

  • 한국어로는 역참조. 사실 이것도 잘 와닿진 않는다.
  • 값에 직접 접근하는 것이 아니라 주소를 이용해 간접적으로 접근하는 것

 

Relationship은 어떤 방식으로 작동되는가?

  • relationship은 코드 상에서 편리하게 다루기 위한 도구이다.
  • relationship을 만들면, 테이블 칼럼이 생기는 것은 아니다.
  • 두 모델(아마도 테이블)간의 관계를 왔다 갔다 할 수 있게 해주는 도구이다.(backref 사용시)
  • 이런게 가능하다.
    • table a와 b에 relationship을 생성(b는 a의 pk를 fk로 사용)
    • python 코드 상에서 만약 a에 대한 객체를 생성하면, b를 연동하여 한번에 갱신하는 것이 가능

 

오늘 본 문서

 

Cascades — SQLAlchemy 1.4 Documentation

Cascades Mappers support the concept of configurable cascade behavior on relationship() constructs. This refers to how operations performed on a “parent” object relative to a particular Session should be propagated to items referred to by that relation

docs.sqlalchemy.org

 

역참조 - 해시넷

역참조(dereference)란 프로그래밍에서 데이터가 저장된 주소로 가서, 그 주소에 해당하는 데이터 값에 접근하는 것을 말한다. 포인터(pointer)는 데이터가 저장된 주소값을 가리키지만, 역참조는 그

wiki.hash.kr

 

 

ORM으로 관련 개체 작업하기 | 파이썬 개발자를 위한 SQLAlchemy

ORM으로 관련 개체 작업하기 이번 챕터에서는 다른 객체를 참조하는 매핑된 객체와 상호작용하는 방식인 또 하나의 필수적인 ORM 개념을 다룰 것입니다. relationship()은 매핑된 두 객체 간의 관계를

soogoonsoogoonpythonists.github.io

 

마지막 문서는 엄청나다!

반응형

댓글