TIL#91 bulk_create
혼자 인스타그램 클론 코딩을 구현중에, patch
method 에 대해서 궁금증이 생겼다. posting 모델링에서 인스타그램은 한 게시물에 여러개의 사진이 게시 가능하기 때문에 image 테이블을 따로 만들고 posting_id
컬럼을 만들어서 posting 의 id를 참조했다. patch 메소드를 써서 게시물을 수정한다고 가정할 때, 수정 전의 이미지가 1,2,3 이라면 수정하고 싶은 이미지가 2,4라면 어떻게 해야 하는지 고민이 되었다. 그래서 posting을 filter 한 다음에 다 지우고, 다시 생성하는 방식으로 하였다. 새로 생성을 할 때, 여러 객체를 한번에 생성해야 하였기 때문에 for문을 이용하였다. 멘토님께서 bulk_create
이라는 메소드를 알려주시면서 한번 공부해보라고 하셔서 공부하고 코드를 바꿨다 🙂
수정 전 코드이다. requset 바디에서 image
라는 이미지리스트를 가져와서 image_list 변수에 넣은 후 반복문을 통해 하나씩 image 테이블을 생성하였다.
burk_create
sql 의 BULK_INSERT 기능을 실행시켜 주는 장고의 orm이다. 대용량의 데이터를 생성하는데 유용하다. 많은 양의 데이터를 한꺼번에 저장해야 할 경우 속도를 배로 줄일 수 있다.
Image.objects.bulk_create([
Image(image='이미지', posting_id='포스팅id'),
Image(image='이미지', posting_id='포스팅id'),
Image(image='이미지', posting_id='포스팅id'),
])
이렇게 create 대신 bulk_create 를 사용하여 하나의 query로 한번에 데이터를 생성할 수 있고, 리스트 형태로 만들면 된다.
이렇게 새로 코드를 수정하였고, 정상적으로 실행되는 것을 unit test 를 통해 확인하였다 👍🏼
Author And Source
이 문제에 관하여(TIL#91 bulk_create), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dnpxm387/TIL-bulkcreate저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)