Генерирует ли Django вызов DB при сохранении, если значения не изменились?

#django #django-models

#django #django-models

Вопрос:

Итак, скажем, у меня есть Klass в качестве модели Django.

 k = Klass.objects.get(id=1)

k.attr1 = k.attr1
k.attr2 = k.attr2
...

k.save()
  

Если предположить, что все значения одинаковы, будет ли ORM Django генерировать вызов SQL?

(Мое приложение выполняет пакетную обработку некоторых моделей в отложенном задании. Он устанавливает их все из CSV, и если это одинаковые значения, он просто сохраняет в данный момент. Я просто хочу знать, должен ли я тратить время на работу с каким-либо механизмом хэширования или логикой, чтобы определить, совпадают ли они)

Ответ №1:

Почему вы не попробовали это в командной строке? Используйте django.db.connection.queries для перечисления всех операций с БД, которые были выполнены в этом сеансе.

Если вы это сделаете, вы увидите, что это действительно генерирует попадание в db. Фактически, вам даже не нужно устанавливать какие-либо атрибуты — достаточно просто вызвать save() только что загруженный экземпляр модели. Экземпляры модели Django не имеют никакого понятия «загрязненности».