版权所有,转载请注明出处:http://guangboo.org/2013/02/01/caught-typeerror-while-rendering-not-enough-arguments-for-format-string
django在执行SQL语句时,在DEBUG模式下与非DEBUG模式下,将表现不同的结果,甚至会出现异常:“Caught TypeError while rendering: not enough arguments for format string”。
这样的现象应该是django在处理SQL语句时,对SQL中出现“%”符号的解析错误。如博客归档的SQL:
SELECT DATE_FORMAT(create_date, '%b %Y') AS yearmonth, COUNT(*) AS count,YEAR(create_date) AS year,
MONTH(create_date) AS month
FROM blog_post
GROUP BY YEAR(create_date),MONTH(create_date)
ORDER BY year DESC,month DESC
该SQL在DEBUG=False的情况下,可以正常执行,编写正常结果。但当DEBUG=True时,却会报“Caught TypeError while rendering: not enough arguments for format string”异常。在网上搜索了一下该异常,解决方法是将SQL语句中的“%”改成“%%”,即需要用“%”符号进行转义,这样就可以在DEBUG=True的情况下正常执行。但一旦将DEBUG设为False,该SQL可以正常执行,但是结果却是“%d %Y ...”,"%%"被转义成单个"%"。
因此,一个hack方法就是根据DEBUG的值使用不同的SQL:
if settings.DEBUG:
sql = """SELECT DATE_FORMAT(create_date, '%%b %%Y') AS yearmonth, COUNT(*) AS count,YEAR(create_date) AS year,MONTH(create_date) AS month
FROM blog_post GROUP BY YEAR(create_date),MONTH(create_date)
ORDER BY year DESC,month DESC"""
else:
sql = """SELECT DATE_FORMAT(create_date, '%b %Y') AS yearmonth, COUNT(*) AS count,YEAR(create_date) AS year,MONTH(create_date) AS month
FROM blog_post GROUP BY YEAR(create_date),MONTH(create_date)
ORDER BY year DESC,month DESC"""
分享到:
相关推荐
Eclipse+Django调试.docEclipse+Django调试.docEclipse+Django调试.doc
支持django使用SQL server作为数据源: DATABASES = { 'default': { 'NAME': 'my_database', 'ENGINE': 'sqlserver_ado', 'HOST': 'dbserver\\ss2008', 'USER': '', 'PASSWORD': '', } }
主要介绍了如何查看Django ORM执行的SQL语句的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Django项目打包执行教程,亲测可用,可对python文件和Django程序进行打包发布,保护源码,Django源码保护
主要介绍了django执行原始查询sql,并返回Dict字典例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Everbug是一款轻量级的Django中间件,适用于Chrome / Firefox扩展,易于安装。
这篇文章主要介绍了调试Django时打印SQL语句的日志代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 设置里面添加如下代码: LOGGING = { 'version': ...
主要介绍了获取django框架orm query执行的sql语句实现方法,结合实例形式分析了Django框架中orm query执行的sql语句获取方法相关实现技巧,需要的朋友可以参考下
然后,使用cursor.execute(sql, [params])来执行SQL语句,使用cursor.fetchone()或者cursor.fetchall()来返回记录集。 例如: >>> from django.db import connection >>> cursor = connection.cursor
python库,解压后可用。 资源全名:django_sql_dashboard-0.1a2-py3-none-any.whl
下面介绍两种查看django 执行的sql语句的方法。 方法一: queryset = Apple.objects.all() print queryset.query SELECT `id`, `name` FROM `apple` 该方法只能查看select语句,但不能查看其他更新保存的语句,会...
通过Chrome开发者工具调试Django应用
django设计模式.txt
今天小编就为大家分享一篇Django shell调试models输出的SQL语句方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Django原生sql也能使用Paginator分页的示例代码,主要使用了count和__getslice__,有兴趣的可以了解一下
如何安装django
先看看那种容易被注入的SQL id = 11001 sql = SELECT id, name, age FROM student WHERE id = +id+ cursor = connection.cursor() try: cursor.execute(sql) result = cursor.fetchall() for ...