Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 局部变量';sql';分配前参考_Python_Sql_Django_Indentation - Fatal编程技术网

Python 局部变量';sql';分配前参考

Python 局部变量';sql';分配前参考,python,sql,django,indentation,Python,Sql,Django,Indentation,您好,我正在尝试使用if/elif编写一个函数,在尝试执行elif之后的最终游标函数时遇到了问题。我认为我的缩进是错误的,一天多来我一直在努力找出错误的地方: def api_report(request): params = request.GET if params["type"] == 'revenue': sql = get_revenue_query(params) elif params["type"] == 'order_count':

您好,我正在尝试使用if/elif编写一个函数,在尝试执行elif之后的最终游标函数时遇到了问题。我认为我的缩进是错误的,一天多来我一直在努力找出错误的地方:

def api_report(request):
    params = request.GET
    if params["type"] == 'revenue':
        sql = get_revenue_query(params)

    elif params["type"] == 'order_count':
        sql = get_order_created_count(params)

    elif params["type"] == 'product_count':
        sql = get_product_count(params)

    elif params["type"] == 'order_card_created_count':
        sql = get_order_card_created_count(params)

    elif params["type"] == 'product_count':
        sql = get_product_count(params)

    elif params["type"] == 'card':
        sql = get_card_query(params)

    elif params["type"] == 'order_not_card_created_count':
        sql = get_order_not_card_created_count(params)

    elif params["type"] == 'product':
        get_product_report(params)

    elif params["type"] == 'order_rate_by_district':
        sql = get_order_rate_by_district(params)

        with connection.cursor() as cursor:
            cursor.execute(sql)
            rows = cursor.fetchall()
            data = []
            for row in rows:
                data.append(OrderRateDataEntry(row[0], row[1], row[2]))
        serializer = OrderRateDataEntrySerializer(data, many=True)
        return JsonResponse(serializer.data, safe=False)

    with connection.cursor() as cursor:
        cursor.execute(sql)
        rows = cursor.fetchall()
        data = []
        for row in rows:
            data.append(TimeSeriesDataEntry(row[0], row[1]))
    serializer = TimeSeriesDataEntrySerializer(data, many=True)
    return JsonResponse(serializer.data, safe=False)
错误:

cursor.execute(sql)  UnboundLocalError: 
    local variable 'sql' referenced before assignment
elif-params[“type”]=“product”:
elif-params[“type”]=“order\u rate\u by_district':
有自己的函数要执行,我希望其他条件跳转到代码末尾的最后一个光标函数。

问题

局部变量“sql”在赋值之前被引用
表示当您试图将其与
游标一起使用时,
sql
尚未被赋值。执行(sql)

params[“type”]=“product”
或if/elif检查都不为真时,就会出现这种情况。例如,
如果params[“type”]
foo
,则不会分配
sql

解决方案

params[“type”]=“product”


params[“type”]
不是您期望的字符串时,使用
else
语句为sql赋值或引发错误。

一旦运行程序,我假设会发生这种情况(读取#)


Maby位于第一个if语句make和空sql变量之前。(或任何您喜欢的默认值)

sql
为空时,您应该重新排列if序列以忽略大小写。否则,您可以只在它上面添加
sql='somedefaultvalue'
,但它已经很难读取了。

您可以在开始时为sql指定一个默认值:

def api_report(request):
    params = request.GET
    sql=''
在我换了房间之后

 elif params["type"] == 'product':
      get_product_report(request)


它之所以有效,是因为get_product_报告是它自己的函数,因此没有任何返回到param='product'条件的结果,因此从product param行(return None)判断它是错误的。

第一个elif应该是if?如果您的代码没有遇到任何一个elif,那么您永远不会定义sql,并且在代码的最后第六行调用sqli,我应该在最后一个elif中添加“pass”吗?因此,其他条件可以使用sql?如果
params[“type”]=“product”
,则会出现错误,因为未定义
sql
。这是你想要的行为吗?在这种情况下,您希望函数做什么?它无法执行任何
sql
光标操作,是否希望函数退出并返回某些内容?可以在末尾添加
else
语句。只要有一系列的
if
elif
s,仍然有可能
sql
最终没有定义=='product'包含在带有其他条件的def中,但我不想对该参数使用sql。这是一个选项,但它是一个api,因此如果没有参数,我不希望它输出任何数据。我认为您想替换整个第二个连接。curstro()。。。使用else语句:“else:data=[]”,如果前面的所有语句都为false,则将不返回任何数据。这就是您的意思吗?第二个sql抓取是针对除产品和订单率按地区以外的其他条件执行。您希望执行的条件是什么?它是否在params变量中?是的,所有params变量都将使用分配的sql执行第二个sql抓取,这是代码的最后6行(除了我提到的那两个条件),如果
params[“type”]
没有选择,这仍然会崩溃。如果没有“type”GET参数,它也会崩溃。因此,如果您的URL是“/api/report”,那么只需调用“/api/report”就会引发异常,而调用“/api/report?type=blablabla”也会引发异常。设计不好。
 elif params["type"] == 'product':
      get_product_report(request)
 elif params["type"] == 'product': 
      return get_product_report(params)