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

t9eec4r0  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(297)

由于某些特殊原因,我们不得不在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公司

xesrikrc

xesrikrc1#

如果您不确定引发的异常,可以从系统调用通用异常信息。
例子:

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

数据库错误也有命名异常。
可以假设和提出相关错误。
参考文件:
错误和例外

h7appiyu

h7appiyu2#

我认为你需要检查各种例外情况。目前,您正在检查是否发生了异常,然后打印 cursor.statusmessage . 当你传递垃圾时, cursor.statusmessage 将不包含任何内容。
处理各种错误情况的好方法是检查各种数据库异常。
django中的各种数据库异常!!!
演示代码:

import django.db as db
try:
    pass
except db.OperationalError as e:
    print str(e)
except db.Error as e:
    print(str(e))
except:
    result = cursor.statusmessage

相关问题