Ошибка при использовании даты между в необработанном запросе Django - PullRequest
0 голосов
/ 06 июня 2011

Я всегда получаю эту ошибку TypeError: not all arguments converted during string formatting

Вот мой запрос

State.objects.raw('...review_create_date between %s and %s group by error_type',[fromdate,todate])

Здесь fromdate=2011-05-21 и todate='2011-05-27'

Приведенный выше запрос выполняется в приглашении mysql, но не может работать в оболочке python

Пожалуйста, кто-нибудь, помогите мне

Вот трассировка

 Traceback (most recent call last):
 File "<console>", line 1, in <module>
 File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 1412, in __iter__
 query = iter(self.query)
 File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 73,  in __iter__
 self._execute_query()
 File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 87, in _execute_query
 self.cursor.execute(self.sql, self.params)
 File "/usr/local/lib/python2.6/dist-packages/django/db/backends/util.py", line 18, in execute
 sql = self.db.ops.last_executed_query(self.cursor, sql, params)
 File "/usr/local/lib/python2.6/dist-packages/django/db/backends/__init__.py", line 216, in last_executed_query
return smart_unicode(sql) % u_params
TypeError: not all arguments converted during string formatting

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

django raw sql запрос в представлении

Я также столкнулся с этой проблемой, поэтому я изменяю старое форматирование на новое, используя формат. У меня это работает.

models.py

class VehicleDamage(models.Model):
    requestdate = models.DateTimeField("requestdate")
    vendor_name = models.CharField("vendor_name", max_length=50)
    class Meta:
        managed=False

views.py

def location_damageReports(request):
    #static date for testing
    date_from = '2019-11-01'
    date_to = '2019-21-01'
    vehicle_damage_reports = VehicleDamage.objects.raw("SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to))
    damage_report = DashboardDamageReportSerializer(vehicle_damage_reports, many=True)
    data={"data": damage_report.data}
    return HttpResponse(json.dumps(data), content_type="application/json")
0 голосов
/ 07 июня 2011

Попробуйте использовать ? вместо %s.

...