如何从数据库中删除特定数量的条目?我做了这样的事
EntriesToDelete=Statusmessages.objects.filter(time__lt=date)[:30000] EntriesToDelete.delete()
但我得到一个错误,它说:AssertionError. Cannot use 'limit' or 'offset' with delete。如何指定要删除的条目数。
AssertionError. Cannot use 'limit' or 'offset' with delete
pprl5pva1#
你可以这样做:
pks = (Statusmessages.objects .filter(time__lt=date) .values_list('pk')[:30000]) Statusmessages.objects.filter(pk__in=pks).delete()
wgxvkvu92#
使用这个:
Statusmessages.objects.filter(pk__in=Statusmessages.objects.filter(time__lt=date).values_list('pk', flat=True)[:30000]).delete()
使用flat=True,如果不是,则是一个元组并引发异常:
flat=True
{NotSupportedError}(1235, "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")
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()
3条答案
按热度按时间pprl5pva1#
你可以这样做:
wgxvkvu92#
使用这个:
使用
flat=True
,如果不是,则是一个元组并引发异常:w6mmgewl3#
如果您得到以下错误:
使用list()强制计算id列表。下面是一个示例: