mysql - 从 Django 调用 MySQL 中的 DATE_FORMAT() 失败

标签 mysql django mysql-python

我可以运行SET语句来分配变量并使用“事务”在mySQL session 中维护它,但是当我包含像这样的函数DATE_FORMAT时:

cursor.execute("SET @dowToday:=CAST( DATE_FORMAT( NOW(), '%w' ) AS UNSIGNED);")

Django 提示

not enough arguments for format string in /usr/lib/pymodules/python2.6/MySQLdb/cursors.py in execute, line 151

删除 CAST 或使用或转义引号没有帮助。

想法?

最佳答案

我的猜测是问题出在查询文本中的百分号 (%)。 (这不是 Django 中的绑定(bind)变量占位符吗?)如果我们要使用绑定(bind)变量,那不是像这样吗?

SELECT 'foo' FROM DUAL WHERE 'a' = %(varname)s ;

我认为 Django 可能正在扫描您的 SQL 文本并遇到 %w 并期望它是一个绑定(bind)变量。要么是这样,要么它正在运行 sprintf 样式函数,并遇到 %w 并期望用参数值替换该占位符。

(我还没有测试过;所以这只是一个想法,只是一个猜测。)

作为解决方法的猜测,也许您将百分号加倍,就像我们通过 sprintf 获得 % 文字一样:

  query("SELECT ... ,'%%w') ...");

如果这不起作用,那么可能是反斜杠字符,就像我们在正则表达式中转义字符一样:

  query("SELECT ... ,'\%w') ...");

(或者,您可能需要将反斜杠加倍。这些只是基于其他软件使用的约定的猜测。)

关于mysql - 从 Django 调用 MySQL 中的 DATE_FORMAT() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136629/

相关文章:

mysql - 创建表 : You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 时出错

mysql - CakePHP 3.x 基于多表的单一关联

mysql - Codeigniter如何在事件记录中进行复杂查询

php - 获取mysql中的特殊字符

javascript - 如何将从网络摄像头捕获的图像保存到文件夹

django - django 的 Secure_ssl_redirect 设置在 heroku 上不执行任何操作

python manage.py startapp 投票

python - 如何在 python 中使用 mysql 数据库调试我的 cgi 脚本。我对如何调试不熟悉

python - 如何使用 Pandas 在 MySQL-DB 中加载和保存部分表

python - 帮助在 Mac OS X 下安装 MySQLdb for Python