On Fri, Sep 17, 2010 at 8:27 AM, SmileyChris <smileych...@gmail.com> wrote: > > On Sep 11, 1:12 pm, Tobias McNulty <tob...@caktusgroup.com> wrote: > > I may be missing something, but queryset.delete() seems oddly implemented > in > > Django. It does a select to get all the IDs to be deleted, and then > deletes > > them, in blocks of 100 I believe, by ID. > > It's because .delete() is emulating the behavior of the SQL constraint > ON DELETE CASCADE > > A list of objects to be deleted is recursively populated, then this > complete list of objects is iteratively deleted (also calling the > pre_delete and post_delete signals in their respective places).
Hm, I see that now, and I suppose there's no sense in changing that behavior. To my credit, the docs are a little misleading, specifically the line reading "Keep in mind that this will, whenever possible, be executed purely in SQL, and so the delete() methods of individual object instances will not necessarily be called during the process." [1] Additionally, is ambiguous whether the part about "ON DELETE CASCADE" applies just to single objection deletion or to queryset deletion as well. Admittedly what it says is not wrong, but it does /suggest/ that delete() on a queryset doesn't do anything per-object, which is not true at all. Perhaps I'll work on clarifying the docs and adding a warning that Django's delete() on a queryset will chunk the actual deletions--in addition to calling signals and deleting related objects one by one--so raw SQL should be used instead if one needs to delete a lot of rows and efficiency is a concern? Does that seem reasonable? Tobias [1] http://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects -- Tobias McNulty, Managing Partner Caktus Consulting Group, LLC http://www.caktusgroup.com -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.