MySQL查询在Django上给出的参数不足错误[关闭]

Posted

技术标签:

【中文标题】MySQL查询在Django上给出的参数不足错误[关闭]【英文标题】:MySQL query gives not enough arguments error on Django [closed] 【发布时间】:2020-10-18 03:54:54 【问题描述】:

我有以下 mysql 查询:

SELECT FROM_UNIXTIME (unixtime, '%Y/%m/%d') AS ndate, count(id) AS query_count FROM myTable GROUP BY ndate ORDER BY query_count DESC

当我在 phpMyadmin 上执行此查询时,它将毫无问题地工作。当我尝试从 Django 执行它时,出现以下错误:

Summary = myTable.objects.raw("SELECT FROM_UNIXTIME (unixtime, '%Y/%m/%d') AS ndate, count(id) AS query_count FROM myTable GROUP BY ndate ORDER BY query_count DESC")

>>not enough arguments for format string

我不明白为什么会这样,因为 Django 应该只执行原始 MySQL 查询。谁能帮我解决这个问题?

【问题讨论】:

我猜 '%' 字符被解释为格式化字符,它们需要被转义(或者你需要提供值)。 谢谢!我怎样才能逃脱那些字符?也许通过将它们分配给一个变量然后连接? 【参考方案1】:

你说:

(unixtime, '%Y/%m/%d')

你想要这个:

(unixtime, '%%Y/%%m/%%d')

在 python 中,%s 例如在格式字符串中具有特殊含义。 而%% 只计算一个百分比字符。 所以当 Django 生成了一个格式化的字符串时 并将其发送到数据库后端, 日期格式将根据需要包含单个百分比。

【讨论】:

【参考方案2】:

导致问题的原因是 '%Y/%m/%d' 意味着字符串替换。试试:

Summary = myTable.objects.raw("SELECT FROM_UNIXTIME (unixtime, '%Y/%m/%%d') AS ndate, count(id) AS query_count FROM myTable GROUP BY ndate ORDER BY query_count DESC")

【讨论】:

以上是关于MySQL查询在Django上给出的参数不足错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

带有子查询的 MySQL 删除给出了语法错误

MySQL 在 node.js 服务器上的空闲时间后给出“读取 ECONNRESET”错误

Django 2.1.3 错误:__init__() 采用 1 个位置参数,但给出了 2 个

Python MySQL 更新查询

django-filter 在参数错误时返回空查询集

read_sql 和 redshift 在 unicode 上给出错误