Django:将参数传递给原始SQL查询时出现MySQL语法错误

时间:2013-12-02 00:32:51

标签: mysql django

我正在尝试执行原始SQL查询,如此

test = Poll.objects.raw('SELECT * FROM %s', ['polls_poll'])

并导致错误:

ProgrammingError at ...

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax...

调试工具栏显示Django执行以下SQL查询:

SELECT * FROM 'polls_poll'

如果我直接在MySQL shell中执行此查询,它也不会工作,除非我用反引号(`)替换单引号(')。

如何让Django使用反引号?或者我做错了什么?

环境:Django 1.6,MySQL 5.6.14,OS X 10.9。

1 个答案:

答案 0 :(得分:3)

我认为您只能传递查询参数,而不能传递字段名称,因此它不适用于表名。

或者,您可以尝试为查询构建简单的字符串:

test_query = 'SELECT * FROM %s' % 'polls_poll'
test = Poll.objects.raw(test_query)

虽然不建议使用原始查询的字符串格式。

更多信息:https://docs.djangoproject.com/en/dev/topics/db/sql/#passing-parameters-into-raw