我在Django中有一个用于数据库连接的小函数,如下所示:
def db_connection(query_name):
try:
cursor = connection.cursor()
cursor.execute(query_name)
descr = cursor.description
rows = cursor.fetchall()
result = [dict(zip([column[0] for column in descr], row)) for row in rows]
return result
except Exception as e:
return e
finally:
cursor.close()
这个函数在我的函数视图中用于Django rest框架来执行SQL查询。一般语法如下:
@api_view(['GET'])
def foo_bar(request):
....
....
....
query1 = "Select name from table"
result = db_connection(query1)
return Response(result, status=status.HTTP_200_OK)
但是,我需要的是根据我的db_connection函数的返回值更改Response元组中的状态值,即如果没有异常则返回200 OK,否则为500.如何检查返回值是否为0一个函数是个例外吗?
答案 0 :(得分:2)
你明确地绕过了异常已经给你的所有好的控制流程。不要那样做。
如果您只想要返回500,那么根本不要捕获异常;只是让它冒泡,Django的异常处理中间件将捕获它并返回500响应。
在任何情况下,你都不应该捕获基本的Exception类;只抓住你实际可以处理的事情。当你捕获异常时,你应该实际处理它;退回它而不是提高它是没有用的。
答案 1 :(得分:2)
我会将foo_bar
函数中的try catch块移到result = db_connection(query1)
代码上,并从那里返回500状态,以及某种错误dict,其中包含一条消息,解释失败的原因。我这样说是因为我假设你正在制作一个REST API,它必须总是返回一个答案而不是崩溃正常的django方式。