Opened 9 years ago
Closed 9 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 , 9 years ago
comment:2 by , 9 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
This is caused by a combination of two things:
- You have a
pre_delete/post_deletesignal registered for yourMyModelor foreign keys pointing to it so Django doesn't perform aDELETE FROMright away and collects objects matching yourfilter()in memory to simulateON DELETE. - No
MyModelmatch your filter no the collection routine stops right away and doesn't both performing aDELETE FROM.
Note:
See TracTickets
for help on using tickets.
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 ?