TIL: 제가 Django로 만들어놓은 모델을 CTO가 주물럭거리다가, 데이터베이스에 직접

 
Kenial Lee

TIL: 제가 Django로 만들어놓은 모델을 CTO가 주물럭거리다가, 데이터베이스에 직접 접속해서 ForeignKey로 참조되는 레코드를 지웠더니 Cascade delete가 일어나지 않는다는 사실을 발견했습니다. 저는 Django 모델에서 ForeignKey 지정을 하면 실제 테이블을 생성할 때 당연히 on delete/update cascade를 설정하는 줄 알고 있었거든요. 아래 링크를 참조해 보시면 아시겠지만, Django는 on delete cascade를 ’emulate’합니다. 데이터베이스에서 제공하는 on delete cascade 기능을 사용하는 대신, ORM으로 각 레코드를 조작할 때 cascade 작업이 필요할 경우 해당 SQL을 ORM이 직접 날려 처리해주는 것이죠.

혹시라도 DB에 직접 접근해서 작업을 해야 한다면 이 부분을 염두에 두시고, 가능하면 Django에서 제공하는 shell을 통해 데이터를 다루시는게 좋겠습니다.

* 나만 몰랐던거면 낭패

Advertisements