django视图中的原始SQL显示错误

时间:2018-01-03 12:20:24

标签: python mysql sql django

由于某些特殊原因,我们必须在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

2 个答案:

答案 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

数据库错误也有命名例外 可以假设和提出相关错误。

请参阅文档