2014-02-06 47 views
0

我不知道什麼是錯在此代碼;以前它工作正常,但在數據庫遷移(sqlite3到MySQL)後,它不再有效。 (我正在使用MySQL)。「長」對象有沒有屬性「使用fetchall」

回溯:在get_response 文件 「/usr/lib/python2.6/site-packages/django/core/handlers/base.py」 111響應=回調(請求,* callback_args,** callback_kwargs) 文件 「/usr/lib/python2.6/site-packages/django/contrib/auth/decorators.py」 在_wrapped_view 23.返回view_func(請求,*指定參數時,** kwargs)

代碼:

cursor = connection.cursor()    
    data = cursor.execute(query) 
    data_list = data.fetchall() 
    return redirect("http://www.example.com?code=123" , code=302) 
    result_count = len(data_list)   
    if result_count==0: 
     return HttpResponse('<script type="text/javascript"> alert ("try again"); window.location.href = "/reports/custom/";</script>') 
    data_desc = data.description 

    j=0 
    """ 
     prepare first response 
    """ 
    now = datetime.datetime.now().strftime('%m-%d-%Y_%H:%M:%S')    
    response = HttpResponse(mimetype='text/csv') 
    response['Content-Disposition'] = 'attachment; filename=hiv_report_%s.csv' % now   
    writer = csv.writer(response) 

    headers = [] 
    tab_no = 0 
    for i in data_desc: 
     #ws.write(0, j, (i[0].replace('_', ' ')).upper())     
     if i[0] == 'id': 
      table_name = tab_order[tab_no] 
      tab_no = tab_no +1 

     headers.append((table_name+ " | " +i[0].replace('_', ' ')).upper()) 

    writer.writerow(headers) 
    """ 
     fill data into csv cells 
    """    
    for value in data_list: 
     k=0 
     no_record_check=1     
     row = [] 
     for val in value: 
      #ws.write(j, k, val) 
      row.append(val) 
     writer.writerow(row) 

回答

5

MySQLdb.cursor.execute(query)返回一個整數與返回的行數。數字對象沒有fetchall方法。你需要調用fetchall方法上cursor

data_list = cursor.fetchall() 

引述Python DB API

.execute(operation [, parameters]) 
Prepare and execute a database operation (query or command). 
[...] 
Return values are not defined. 

正如馬亭在評論sqlite3.cursor.execute回報光標說。 由於cursor.execute返回值不是由DB API MySQLdb.cursor.execute定義可以返回任何東西(庫作家選擇了返回的行數)。

這意味着,與Python DB API工作的簡單的方法是忽略的cursor.execute返回值。

+1

沒錯,和''sqlite3' cursor.execute()'調用只是返回遊標,這就是爲什麼它使用前的工作。 –

+0

謝謝,但現在我得到: 「長」對象有沒有屬性「描述」 – user3269734

+1

@ user3269734,你需要使用'cursor'對象,而不是'data'。所以'data.description'應該是'cursor.description'。 –