#30770: annotating  TruncBase on ExpressionWrapper for date arithmetic, causes
unnecessary  placeholder "%s" escaping to "%%s"
-------------------------------------+-------------------------------------
               Reporter:  Jurgis     |          Owner:  nobody
  Pralgauskis                        |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  1.11
  layer (models, ORM)                |       Keywords:  TruncBase, DateTime
               Severity:  Normal     |  arithmetics,
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 I tried:
 {{{#!python
 from django.db.models import F,  DateTimeField, ExpressionWrapper
 from django.db.models.functions import Cast, Least, Greatest, Now,
 Coalesce, ExtractWeekDay, TruncDay
 User.objects
    .annotate(trial_end=TruncDay(ExpressionWrapper(F('date_joined')+
 timedelta(days=30), output_field=DateTimeField())))
    .values('id', 'date_joined', 'trial_end')[:3]
 )
 }}}

 and got
 {{{
 Traceback (most recent call last):
   File "<input>", line 3, in <module>
   File "lib/python3.4/site-packages/django/db/models/query.py", line 226,
 in __repr__
     data = list(self[:REPR_OUTPUT_SIZE + 1])
   File "lib/python3.4/site-packages/django/db/models/query.py", line 250,
 in __iter__
     self._fetch_all()
   File "lib/python3.4/site-packages/django/db/models/query.py", line 1118,
 in _fetch_all
     self._result_cache = list(self._iterable_class(self))
   File "lib/python3.4/site-packages/django/db/models/query.py", line 106,
 in __iter__
     for row in compiler.results_iter():
   File "lib/python3.4/site-packages/django/db/models/sql/compiler.py",
 line 836, in results_iter
     results = self.execute_sql(MULTI)
   File "lib/python3.4/site-packages/django/db/models/sql/compiler.py",
 line 894, in execute_sql
     raise original_exception
   File "lib/python3.4/site-packages/django/db/models/sql/compiler.py",
 line 884, in execute_sql
     cursor.execute(sql, params)
   File "lib/python3.4/site-packages/django/db/backends/utils.py", line 80,
 in execute
     return super(CursorDebugWrapper, self).execute(sql, params)
   File "lib/python3.4/site-packages/django/db/backends/utils.py", line 65,
 in execute
     return self.cursor.execute(sql, params)
 TypeError: not all arguments converted during string formatting
 }}}


 and

 {{{#!python
  qs.query.sql_with_params()[0]
 }}}

 shows

 {{{#!sql
 'SELECT "ta_account"."id", "ta_account"."date_joined", DATE_TRUNC(\'day\',
 ("ta_account"."date_joined" + %%s) AT TIME ZONE %s) AS "trial_end" FROM
 "ta_account" LIMIT 3'
 }}}

 notice **%%s** -- that causes problem..

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

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/046.89aca90261269d4e5edabfff30233151%40djangoproject.com.

Reply via email to