#32418: Django f expressions seems to not work with MySQL
-----------------------------------------+------------------------
               Reporter:  HoshiYamazaki  |          Owner:  nobody
                   Type:  Bug            |         Status:  new
              Component:  Uncategorized  |        Version:  3.1
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+------------------------
 My code:
 ```python
 duration_expression = ExpressionWrapper(
     datetime.timedelta(minutes=1) * F('duration'),
     output_field=DurationField())
 booking_end = ExpressionWrapper(
     F('booking_dt') + duration_expression,
     output_field=DateTimeField())
 booking_qs.annotate(
     booking_end=booking_end).get(
     Q(Q(booking_dt__lte=first_interval),
       Q(booking_dt__gte=next_interval)) |
     Q(Q(booking_end__lte=first_interval),
       Q(booking_end__gte=next_interval)))duration_expression =
 ExpressionWrapper(
     datetime.timedelta(minutes=1) * F('duration'),
     output_field=DurationField())
 booking_end = ExpressionWrapper(
     F('booking_dt') + duration_expression,
     output_field=DateTimeField())
 booking_qs.annotate(
     booking_end=booking_end).get(
     Q(Q(booking_dt__lte=first_interval),
       Q(booking_dt__gte=next_interval)) |
     Q(Q(booking_end__lte=first_interval),
       Q(booking_end__gte=next_interval)))
 ```

 Error I get:
 ```
 (1064, "You have an error in your SQL syntax; check the manual that
 corresponds to your MySQL server version for the right syntax to use near
 '* `carwashes_carwashbooking`.`duration`) MICROSECOND) AS `booking_end`
 FROM `car' at line 1")
 ```

 SQL query:
 ```sql
 ('SELECT `carwashes_carwashbooking`.`id`, '
  '`carwashes_carwashbooking`.`carwash_id`, '
  '`carwashes_carwashbooking`.`created_dt`, '
  '`carwashes_carwashbooking`.`booking_dt`, '
  '`carwashes_carwashbooking`.`duration`,
 `carwashes_carwashbooking`.`car_id`, '
  '`carwashes_carwashbooking`.`car_name`,
 `carwashes_carwashbooking`.`plate`, '
  '`carwashes_carwashbooking`.`status`,
 `carwashes_carwashbooking`.`driver_id`, '
  '`carwashes_carwashbooking`.`phone_number`, '
  '`carwashes_carwashbooking`.`service_id`,
 `carwashes_carwashbooking`.`notes`, '
  '(`carwashes_carwashbooking`.`booking_dt` + INTERVAL (INTERVAL 60000000 '
  'MICROSECOND * `carwashes_carwashbooking`.`duration`) MICROSECOND) AS '
  '`booking_end` FROM `carwashes_carwashbooking` WHERE '
  '(`carwashes_carwashbooking`.`carwash_id` = %s AND '
  '`carwashes_carwashbooking`.`driver_id` = %s AND '
  '((`carwashes_carwashbooking`.`booking_dt` <= %s AND '
  '`carwashes_carwashbooking`.`booking_dt` >= %s) OR '
  '((`carwashes_carwashbooking`.`booking_dt` + INTERVAL (INTERVAL 60000000
 '
  'MICROSECOND * `carwashes_carwashbooking`.`duration`) MICROSECOND) <= %s
 AND '
  '(`carwashes_carwashbooking`.`booking_dt` + INTERVAL (INTERVAL 60000000 '
  'MICROSECOND * `carwashes_carwashbooking`.`duration`) MICROSECOND) >=
 %s))) '
  'LIMIT 21')
 ```

 Stackoverflow issue: https://stackoverflow.com/questions/66044255/django-
 returns-sql-syntax-error-when-using-expressionwrapper-and-f-expressions

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32418>
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/056.75fca4d54c4b9921bfa0846b63c4ae2a%40djangoproject.com.

Reply via email to