objects.get 과 objects.filter 차이

반응형

그동안 저작권에 대해 너무 안일하게 생각했던 것 같다.

유료 강의를 보면서 정리했던 글을, 저작권자의 입장을 생각없이 멋대로 포스팅을 했던 것 같다.

 

앞으로는 최대한 내가 짠 코드, 내가 생산하는 콘텐츠 위주로 작성하고자 한다.

(만약 그렇지 않다면 출처는 더 자세히 남기고자 한다)

 

이번해 상반기에 5주 동안 타 대학교 학생들과 연합하여 2021 Silicon Valley Online Internship 프로그램을 진행한 바 있다.

나는 그때 라즈베리파이를 주로 담당하고 백엔드를 보조했는데 그때 생겼던 문제로 인해 알게 된 부분이다.

(다시 코드를 보니까 뭔가 부끄럽다.......)

 

현재 상황

  • 에러가 났다. 분명히 objects.get(파라미터1, 파라미터2)를 통해 쿼리셋을 찾고 있나 없냐에 따라 예외처리문으로 분기하여 로직을 만들었다.
try:
    exist = AverageLog.objects.get(average_time=self.time, sensor_id=self.sensor_id)
    AverageLog.objects.update(average_masked=masked_avg, average_unmasked=unmasked_avg)
except:
    AverageLog.objects.create(average_time=self.time, sensor_id=self.sensor_id, average_masked=masked_avg, average_unmasked=unmasked_avg)
  • 내가 로컬에서 샘플 데이터를 넣었을때는 잘 들어가는 것 같아 보였지만, 실제 seeder로 데이터를 넣어 보니까 문제가 발생한 것이다.
  • 이렇게 들어간 Log 데이터에서 파생되는 데이터 부분에서 문제가 생겼는데(시간 부분은 xx55 부분 이후로 끊어야 하는데 아직 seeder에서 해결하는 중),
  • average_masked, average_unmasked가 똑같은 값으로 나오는 문제가 발생한 것이다.

문제 해결

  • 아마도 try문으로 분기를 해둬서 그런지 전부다 except로 넘어가는 것 같다. 동일한 sensor_id, time 기준으로는 row가 하나만 있고 값만 업데이트가 되어야 하는데, 이 부분에서 문제가 생긴 것으로 파악이 된다.
exist = AverageLog.objects.filter(average_time=self.time, sensor_id=self.sensor_id)
  if exist:
      exist.update(average_masked=masked_avg, average_unmasked=unmasked_avg)
  else:
      AverageLog.objects.create(average_time=self.time, sensor_id=self.sensor_id, average_masked=masked_avg, average_unmasked=unmasked_avg)
  • 이런식으로 분기를 바꿔주고 기존에 Log model보다 AverageLog model이 아래쪽에 있는 부분이 문제가 될 것도 같아 위치를 바꿔주었다.
반응형