Python 将文字百分比符号传递给QuerySet.extra()

Python 将文字百分比符号传递给QuerySet.extra(),python,django,sqlite,python-3.x,django-1.7,Python,Django,Sqlite,Python 3.x,Django 1.7,我想执行以下代码: Booking.objects.filter(start_ts__isnull = False, end_ts__isnull = False).extra(select = {'amount': "strftime('%s', end_ts) - strftime('%s', start_ts)"}) 但是,在shell中,我得到以下错误: Traceback (most recent call last): File "<console>", line

我想执行以下代码:

 Booking.objects.filter(start_ts__isnull = False, end_ts__isnull = False).extra(select = {'amount': "strftime('%s', end_ts) - strftime('%s', start_ts)"})
但是,在shell中,我得到以下错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/polesz/Projects/duckbook/venv/lib/python3.4/site-packages/django/db/models/query.py", line 835, in extra
    clone.query.add_extra(select, select_params, where, params, tables, order_by)
  File "/home/polesz/Projects/duckbook/venv/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1744, in add_extra
    entry_params.append(next(param_iter))
StopIteration

但是不管引号的用法如何,结果查询都有
\'%s\'
,这当然会给出一个SQL错误。

我遇到了完全相同的问题,希望在这里继续讨论

我通过使用带有双百分号的.format方法绕过了这个问题。例如,如果您的
Foo
模型带有
date\u字段
,并且希望执行SQL方法
date\u格式(date\u字段,%Y-%m')
,则可以使用Django 1.7格式执行此操作:

Foo.objects.extra(
    select={'formatted_date': 
        "date_format(date_field, '{param}')".format(param='%%Y-%%m')}
)

作为参考,Django 1.7中存在一个错误,不允许直接将literal
%s
传递给extra select。这个问题已经解决,下面是链接:

你知道这个问题的答案了吗?如果是,请发布这个问题的正确答案。还没有,但我仍然感兴趣(即使项目现在已经转移到PostgreSQL)。
Foo.objects.extra(
    select={'formatted_date': 
        "date_format(date_field, '{param}')".format(param='%%Y-%%m')}
)