TIL#91 bulk_create

Dasom·2020년 10월 14일
0

Django

목록 보기
14/32

혼자 인스타그램 클론 코딩을 구현중에, 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 를 통해 확인하였다 👍🏼

profile
개발자꿈나무🌲

0개의 댓글