Python 如何调试:内部错误当前事务被中止,在事务块结束之前忽略命令
大家好 我使用GeoDjango完成了我的第一步,我正在寻找更好的选项来检查错误的sql语句 到目前为止,我只是想在我的postgresql表中保存一个lng+lat点 该模型定义为:Python 如何调试:内部错误当前事务被中止,在事务块结束之前忽略命令,python,django,postgresql,postgis,geodjango,Python,Django,Postgresql,Postgis,Geodjango,大家好 我使用GeoDjango完成了我的第一步,我正在寻找更好的选项来检查错误的sql语句 到目前为止,我只是想在我的postgresql表中保存一个lng+lat点 该模型定义为: geolocation = models.PointField(_('Geo Location'), geography=True, null = True, blank = True,
geolocation = models.PointField(_('Geo Location'),
geography=True,
null = True,
blank = True,
help_text=_('Geolocation with Longitude and Latitude'))
objects = models.GeoManager()
在我看来,我尝试执行以下命令
savedProject.geolocation = GEOSGeometry('POINT(%s %s)' %(u_lng,u_lat))
但我在尝试保存表单时收到以下错误:
异常类型:InternalError
异常值:当前事务为
中止,在事务块结束之前忽略命令
此错误的原因是什么?我相信sql语句可能有问题,但最好的检查方法是什么?Django只提供一般错误消息“内部错误”。
谢谢你的帮助和建议 在大多数情况下,这意味着前一条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
提供任何其他控制台输出,请尝试:
/tmp
autocomplete\u light\u env/src/django autocomplete light/test\u project
test\u project/settings.py
,将日志记录
配置替换为上述配置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=[]
您建议的SQL日志记录配置没有为我提供任何额外的控制台日志记录。我有DEBUG=True,所以我不确定还要尝试什么来实际查看SQL。我的.extra()调用有一个错误,我的where有一个拼写错误。我花了几个小时才注意到。如果我能够看到我生成的SQL,那将是小菜一碟。我的问题得到了解决,但Django肯定没有帮助。我给你的答案加1,因为“在大多数情况下,这意味着前面的SQL语句无法执行。”这正是我的问题所在。堆栈跟踪显示一个无法保存的对象,但实际上是它上面的一个查询。根据我的经验,Django堆栈跟踪在大多数情况下都没有任何帮助。因此,我更新了答案,以包含一种测试此日志记录配置的简单方法。这允许您知道这是否来自您的项目(设置?)或环境。日志指令的重要部分(与默认Django安装相比)是设置
'Django':{{…'level':'DEBUG'.}
而不是记录器
部分中的'INFO'
。