我可以运行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/