I don't know what is wrong in this code; previously it was working fine but after a database migration (sqlite3 to MySQL) it is no longer working. (I am using MySQL).
Traceback:
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
code:
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)
Best Answer
MySQLdb.cursor.execute(query)
returns an integer with the number of returned rows. Number objects don't havefetchall
method. You need to callfetchall
method on acursor
:To quote Python DB API:
As Martijn said in the comment
sqlite3.cursor.execute
returns cursor. Since return value ofcursor.execute
is not defined by DB APIMySQLdb.cursor.execute
can return anything (the library writers chose to return a number of rows).This means that the portable way of working with Python DB API is to ignore the return value of
cursor.execute
.