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 在 node.js 服务器上的空闲时间后给出“读取 ECONNRESET”错误