[Django] #28023: Wrong method in SQL query log

6 views
Skip to first unread message

Django

unread,
Apr 5, 2017, 5:12:28 AM4/5/17
to django-...@googlegroups.com
#28023: Wrong method in SQL query log
-------------------------------------+-------------------------------------
Reporter: erkib | Owner: nobody
Type: Bug | Status: new
Component: Database | Version: 1.11
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
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.

--
Ticket URL: <https://code.djangoproject.com/ticket/28023>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Apr 5, 2017, 11:18:26 AM4/5/17
to django-...@googlegroups.com
#28023: Wrong method in SQL query log
-------------------------------------+-------------------------------------
Reporter: erkib | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.11
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by kapil garg):

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 ?

--
Ticket URL: <https://code.djangoproject.com/ticket/28023#comment:1>

Django

unread,
Apr 5, 2017, 11:19:58 AM4/5/17
to django-...@googlegroups.com
#28023: Wrong method in SQL query log
-------------------------------------+-------------------------------------
Reporter: erkib | Owner: nobody
Type: Bug | Status: closed

Component: Database layer | Version: 1.11
(models, ORM) |
Severity: Normal | Resolution: invalid
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Simon Charette):

* status: new => closed
* resolution: => invalid


Comment:

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`.

--
Ticket URL: <https://code.djangoproject.com/ticket/28023#comment:2>

Reply all
Reply to author
Forward
0 new messages