база данных django удалить определенное количество записей

Как удалить определенное количество записей из базы данных? Я сделал что-то вроде этого

EntriesToDelete=Statusmessages.objects.filter(time__lt=date)[:30000]
EntriesToDelete.delete()

Но я получаю сообщение об ошибке: AssertionError. Cannot use 'limit' or 'offset' with delete.

Как указать количество удаляемых записей.


person arjun    schedule 06.11.2012    source источник


Ответы (1)


Вы можете сделать это следующим образом:

Statusmessages.objects.filter(pk__in=Statusmessages.objects.filter(time__lt=date).values_list('pk')[:30000]).delete()
person jpic    schedule 06.11.2012
comment
Я использовал что-то подобное и зациклился на нем, чтобы предотвратить использование памяти БД при удалении миллионов строк. - person odedbd; 08.02.2014
comment
Хороший. Возможно, вам также понадобится «flat=True» в вызове values_list. - person Quentin Stafford-Fraser; 15.10.2018
comment
И MariaDB, и Mysql этого не любят — вы получаете django.db.utils.NotSupportedError: (1235, "This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"). - person Danny Staple; 02.07.2019