Opened 7 years ago

Closed 7 years ago

#28023 closed Bug (invalid)

Wrong method in SQL query log

Reported by: Erki Bender Owned by: nobody
Component: Database layer (models, ORM) Version: 1.11
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

When SQL query logging is enabled and you run a following:

n = now() - timedelta(days=30)
MyModel.objects.filter(my_date__lt=n).delete()

Query being logged is:

2017-04-05 11:41:22,192 DEBUG (0.019) QUERY = 'SELECT "MY_MODEL"."ID", "MY_MODEL"."MY_DATE" FROM "MY_MODEL" WHERE "MY_MODEL"."MY_DATE" < :arg0' - PARAMS = (Oracle_datetime(2017, 3, 6, 8, 41, 21, 913366),); args=(Oracle_datetime(2017, 3, 6, 8, 41, 21, 913366),)

The same behaviour happens with 1.10.* version of Django as well.

Change History (2)

comment:1 by kapil garg, 7 years ago

I don't see this. Here is the model i used and query i performed

class Test(models.Model):
    name = models.CharField(max_length=100, blank=True)

#shell
>>> Test.objects.filter(name__startswith='test').delete()
(0.000) BEGIN; args=None
(0.001) DELETE FROM "bug_test" WHERE "bug_test"."name" LIKE 'test%' ESCAPE '\'; args=('test%',)
(1, {'bug.Test': 1})

Is this bug related to some particular backend or does this bug also result in failure of the delete() method ?
Does your object get deleted or not ?

comment:2 by Simon Charette, 7 years ago

Resolution: invalid
Status: newclosed

This is caused by a combination of two things:

  1. You have a pre_delete/post_delete signal registered for your MyModel or foreign keys pointing to it so Django doesn't perform a DELETE FROM right away and collects objects matching your filter() in memory to simulate ON DELETE.
  2. No MyModel match your filter no the collection routine stops right away and doesn't both performing a DELETE FROM.
Note: See TracTickets for help on using tickets.
Back to Top