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

标签 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。

最佳答案

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

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

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

关于mysql - Django:将参数传递给原始 SQL 查询时出现 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319080/

相关文章:

Django:需要帮助以防止应用程序相互依赖

mysql - 如何查询可能不存在的多对多?

sql - 仅使用 MySQL 查询删除重复项?

python - Django REST Framework,pre_save() 和 serializer.is_valid(),它们是如何工作的?

python - 使用自定义上下文覆盖 Django View (Django 1.11,Viewflow)

json - Django RestFramework 分组依据

mysql - MySQL 中的 CREATE TABLE 语法错误

php - 排除字段值为空的结果

mysql - 如何只取最后一笔交易来计算 timediff mysql 5.7

python - 为 Django 应用程序删除了 Postgres 数据库,现在 manage.py 将无法工作