django数据库删除特定数量的条目

fivyi3re  于 2023-10-21  发布在  Go
关注(0)|答案(3)|浏览(145)

如何从数据库中删除特定数量的条目?我做了这样的事

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

但我得到一个错误,它说:AssertionError. Cannot use 'limit' or 'offset' with delete
如何指定要删除的条目数。

pprl5pva

pprl5pva1#

你可以这样做:

pks = (Statusmessages.objects
       .filter(time__lt=date)
       .values_list('pk')[:30000])
Statusmessages.objects.filter(pk__in=pks).delete()
wgxvkvu9

wgxvkvu92#

使用这个:

Statusmessages.objects.filter(pk__in=Statusmessages.objects.filter(time__lt=date).values_list('pk', flat=True)[:30000]).delete()

使用flat=True,如果不是,则是一个元组并引发异常:

{NotSupportedError}(1235, "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")
w6mmgewl

w6mmgewl3#

如果您得到以下错误:

django.db.utils.NotSupportedError: (1235, "This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")

使用list()强制计算id列表。下面是一个示例:

sessions_to_delete = LoginSession.objects.filter(user=self.userProfile)[3:]
pks_of_sessions_to_delete = list(sessions_to_delete.values_list("pk", flat=True))
LoginSession.objects.filter(pk__in=pks_of_sessions_to_delete).delete()

相关问题