由于某些特殊原因,我们必须在view.py文件中执行原始查询。 (有一些页面,用户键入一个SQL查询并发送它,所以我们的系统,我们应该执行它并显示tat查询的结果)
def query(request):
result = None
if request.method == "POST":
form = forms.QueryForm(request.POST)
if form.is_valid():
query_text = form.cleaned_data['query']
with connection.cursor() as cursor:
try:
cursor.execute(query_text)
result = cursor.fetchall()
except:
result = cursor.statusmessage
else:
form = forms.QueryForm()
return render(request, "portal/query.html", {
'form': form,
'result': result
})
如果我们运行SELECT * FROM table1之类的东西,try部分会成功运行,如果一些查询没有返回像UPDATE这样的行,那么except部分就可以了。
我的问题是,如果我们执行一些无意义的查询,例如 sakufhskghks ,我们希望看到来自DB的错误,或来自DB的任何类型的错误。
这可能吗? TNX
答案 0 :(得分:1)
我认为你需要检查各种异常。
目前,您只是检查发生了一些异常,然后打印cursor.statusmessage
。当您通过垃圾邮件时,cursor.statusmessage
将不包含任何内容。
处理各种错误情况的好方法是检查各种数据库异常。
Various Database Exceptions in Django!!!
演示代码:
import django.db as db
try:
pass
except db.OperationalError,e:
print str(e)
except db.Error,e:
print(str(e))
except:
result = cursor.statusmessage
答案 1 :(得分:1)
如果您不确定引发的异常,可以从系统中调用常规异常信息。
示例:
import sys
....
try:
# whatever code you want ...
pass
except OSError as err: # when you know and expect specific error
# decide what you want to perform
pass
except ValueError: # when you know and expect specific error
# decide what you want to perform
pass
except: # unhandled exceptions
print("Unexpected error:", sys.exc_info()[0])
raise
数据库错误也有命名例外 可以假设和提出相关错误。
请参阅文档: