@raiboon

Как удалить много объектов django?

Логично:
model.objects.filter(
                date__gte=date.fromtimestamp(start),
                date__lte=date.fromtimestamp(end)
            ).delete()


Там достаточно много записей. И я вижу сотни подобных запросов:
DEBUG:django.db.backends:(0.085) DELETE FROM "bla-bla-bla" WHERE "bla-bla-bla"."id" IN (77787523, 77787522, 77787521, 77787520, 77787519, 77787518, 77787517, 77787516, 77787515, 77787514, 77787513, 77787512, 77787511, 77787510, 77787509, 77787508, 77787507, 77787506, 77787505, 77787504, 77787503, 77787502, 77787501, 77787500, 77787499, 77787498, 77787497, 77787495, 77787494, 77787493, 77787492, 77787491, 77787490, 77787489, 77787488, 77787487, 77787486, 77787485, 77787484, 77787483, 77787482, 77787481, 77787480, 77787479, 77787478, 77787477, 77787476, 77787475, 77787474, 77787473, 77787472, 77787471, 77787470, 77787469, 77787468, 77787467, 77787466, 77787465, 77787464, 77787463, 77787462, 77787461, 77787460, 77787459, 77787458, 77787457, 77787456, 77787455, 77787454, 77787453, 77787452, 77787451, 77787450, 77787449, 77787448, 77787447, 77787446, 77787445, 77787444, 77787443, 77787442, 77787441, 77787440, 77787439, 77787438, 77787437, 77787436, 77787435, 77787434, 77787433, 77787432, 77787431, 77787430, 77787429, 77787428, 77787427, 77787426, 77787425, 77787424, 77787423); args=(77787523, 77787522, 77787521, 77787520, 77787519, 77787518, 77787517, 77787516, 77787515, 77787514, 77787513, 77787512, 77787511, 77787510, 77787509, 77787508, 77787507, 77787506, 77787505, 77787504, 77787503, 77787502, 77787501, 77787500, 77787499, 77787498, 77787497, 77787495, 77787494, 77787493, 77787492, 77787491, 77787490, 77787489, 77787488, 77787487, 77787486, 77787485, 77787484, 77787483, 77787482, 77787481, 77787480, 77787479, 77787478, 77787477, 77787476, 77787475, 77787474, 77787473, 77787472, 77787471, 77787470, 77787469, 77787468, 77787467, 77787466, 77787465, 77787464, 77787463, 77787462, 77787461, 77787460, 77787459, 77787458, 77787457, 77787456, 77787455, 77787454, 77787453, 77787452, 77787451, 77787450, 77787449, 77787448, 77787447, 77787446, 77787445, 77787444, 77787443, 77787442, 77787441, 77787440, 77787439, 77787438, 77787437, 77787436, 77787435, 77787434, 77787433, 77787432, 77787431, 77787430, 77787429, 77787428, 77787427, 77787426, 77787425, 77787424, 77787423)

Т.е. он выбрад все записи и начал их удалять группами... Нафига? Как удалить номрально используя орм?
  • Вопрос задан
  • 588 просмотров
Решения вопроса 1
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Все дело в том, что джанга производит рассылку сигналов удаления на уровне ORM, все эти pre_delete и post_delete
https://docs.djangoproject.com/en/dev/topics/signals/
Поэтому и тянутся все удаляемые обьекты, что бы разослать сообщения зависимым обьектам :( поэтому массовое удаление выглядит как вытяжка всех айдишников, рассылка сигналов, а потом delete from ... where id in (<и тут кучища этих id через запятую>).
Поэтому для удаления нескольких миллионов записей, к примеру, я использую только RAW SQL, увы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы