python - Django ORM magic. Bug or a feature? -
data = self.get_queryset()\ .annotate(total=func(sum('money_field'), value('char'), function="convert"))\ .filter(date__lt=end, date__gte=start) if execute data.query - works fine, data.all() raise mysql error.
reason of magic django func(), when try pass constant param (without brackets) -- threre 1 way it: using django value().
it works fine, when query throught data.query, when execute -- mysql add additional quotes,
working wariant is:
data = self.get_queryset()\ .annotate(total=func(sum('money_field'), value('char'), function="convert"))\ .filter(date__lt=end, date__gte=start) cursor = connection.cursor() cursor.execute(str(data.query).replace('%', '%%'), []) data_list = cursor.fetchall() anyone can wtf ?
upd 2: printing query of queryset looks like:
select `blankapp_modela`.`id`, `blankapp_modela`.`decimal_field`, convert(sum(`blankapp_modela`.`decimal_field`), char) `total` `blankapp_modela` group `blankapp_modela`.`id` order null looking deeper in mysql cursor found next:
select `blankapp_modela`.`id`, `blankapp_modela`.`decimal_field`, convert(sum(`blankapp_modela`.`decimal_field`), 'char') `total` `blankapp_modela` group `blankapp_modela`.`id` order null limit 21 char wrapped quotes, not right. don't know right solution now. not django issue, mysqldb behavior.
Comments
Post a Comment