大多数情况下,这意味着前一个SQL语句执行失败。在这种情况下,您应该:
启用 SQL 日志记录,将以下片段粘贴到 settings.py 中:
设置 DEBUG=1,否则 SQL 不会被记录
再次运行 runserver,您应该可以在控制台中看到所有的 SQL 查询
直接在数据库中执行最后的 SQL 查询,然后您应该能够找出哪些查询失败并进行调试 - 或者开一个新问题,专门针对导致问题的查询。您可以使用 phpMyAdmin、直接的 CLI 客户端或任何数据库客户端,以逐个执行 SQL 查询,直到找到需要修改的查询为止。
SQL 日志配置:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s',
},
},
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter': 'simple'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'DEBUG',
},
}
}
如果此配置没有提供任何额外的控制台输出与 runserver
,那么可以尝试使用django-autocomplete-light 的示例测试项目:
阅读并复制安装命令到 /tmp
切换到 autocomplete_light_env/src/django-autocomplete-light/test_project
目录
打开 test_project/settings.py
文件,将 LOGGING
配置替换为上面的配置
运行 runserver
并在浏览器中打开
你的控制台会像这样:
Validating models...
0 errors found
Django version 1.4.1, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
DEBUG (0.001) SELECT "django_content_type"."id", "django_content_type"."name", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."model" = taggable AND "django_content_type"."app_label" = charfield_autocomplete ); args=('taggable', 'charfield_autocomplete')
DEBUG (0.000)
SELECT DISTINCT "tagging_tag".id, "tagging_tag".name
FROM
"tagging_tag"
INNER JOIN "tagging_taggeditem"
ON "tagging_tag".id = "tagging_taggeditem".tag_id
INNER JOIN "charfield_autocomplete_taggable"
ON "tagging_taggeditem".object_id = "charfield_autocomplete_taggable"."id"
WHERE "tagging_taggeditem".content_type_id = 11
GROUP BY "tagging_tag".id, "tagging_tag".name
ORDER BY "tagging_tag".name ASC; args=[]
'django': {{… 'level': 'DEBUG' …}}
而不是'INFO'
。 - jnns