我试图从 mysql 中提取数据到 csv 文件。问题是行与 mysql 中的顺序不同。
在 mysql 中,我在 uid 表 1,2,3,4,5,6,7,8,9,10,11 中有这个,但响应是 10,9,11,2,1,4,3, 6,5,8,7。
cursor=conn.cursor()
cursor.execute("SELECT * FROM test ORDER BY uid;")
rows = cursor.fetchall()
#rows = sorted(rows1)
allResults = {}
for row in rows:
#for row in rows:
uid = str(row[0])
data = str(row[1])
allResults[uid] = [uid,data]
#numbers.append(allResults)
return allResults
def getCSV():
if request.method == 'POST':
nr = str(request.form['nrsearch']).strip()
try = str(request.form['trysearch']).strip()
year = str(request.form['yearsearch']).strip()
allResults = readFromDBCSV(nr, try, year)
#print(allResults)
filename = str(nr)+"."+str(try)+"."+str(year)+'.csv'
if len(allResults) > 0:
with open('static/CSV/'+str(filename), 'wb') as csvfile:
CSVwriter = csv.writer(csvfile, delimiter=';', quotechar='|', quoting=csv.QUOTE_MINIMAL)
CSVwriter.writerow(['test'])
for result in allResults:
CSVwriter.writerow(allResults[result])
return '''DONE '''+str(len(allResults))+''' RESULTS<br>
<form method=post enctype=multipart/form-data action="/doneCSV/">
<input type="hidden" name="filename" value="'''+str(filename)+'''">
<input type=submit name="Download CSV" value="Download CSV"><br>
<a href="/getCSV/">Return</a>'''
else:
return 'NO RESULTS<br><a href="/getCSV/">Return</a>'
return render_template('searchCSV.html')
最佳答案
Python 字典是无序的——这在 FWIW 中有记录。如果您想保持插入顺序,请使用 collection.OrderedDict
而不是 dict
。
现在对于您的用例,解决方案要简单得多:根本不要使用字典,要么使用 cursor.fetchall()
返回的列表,要么更好的是,只传递您的游标到作者(游标是可迭代的)。
cursor.execute(your_query_here)
with open(path/to/file.csv, "wb") as f:
writer = csv.writer(f, ....)
writer.writerows(cursor)
关于Python 提取 mysql 到 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50810204/