我在flask中构建了一个应用程序,用于捕获数据并将其存储在SQl数据库中。我希望应用程序下拉收集的数据,并将其作为csv文件上传到dropbox,只需点击一个按钮。我还应该提到的是,该应用程序目前部署在Heroku服务器上,所以我正在使用它们的临时文件系统。这是我的代码:
#select the target day out of holder
cur = mysql.connection.cursor()
targetDate = calculateAdmin()
cur.execute('''SELECT * FROM allReservations WHERE date = %s''', [targetDate])
data = cur.fetchall()
keys = data[0].keys()
#get date for output file name
cur.execute('''SELECT * FROM adminHolder''')
bollucks = cur.fetchall()
title = bollucks[0]["day"]
#write data to csv file
a_file = open("output.csv", "w")
dict_writer = csv.DictWriter(a_file, keys)
dict_writer.writeheader()
dict_writer.writerows(data)
a_file.close()
#upload file to dropbox
file_location = f"/Beeg-Yoishi/{a_file}"
dbx = dropbox.Dropbox("<ACCESS_TOKEN>")
with open("output.csv", "rb") as f:
reader = csv.reader(f)
dbx.files_upload(reader, file_location)
return render_template("download.html")
现在,我可以将数据写入csv文件,然后从Heroku服务器上取下该文件。但当我尝试将文件上传到dropbox时,该文件的标题为<_io.TextIOWrapper name='output.csv'模式='w'编码='UTF-8'>而不是";output.csv";我收到一个错误,说我无法查看该文件。有什么建议吗?
这里似乎有两个问题:
1.
当我尝试将文件上传到dropbox时,文件的标题为<_io.TextIOWrapper name='output.csv'模式='w'编码='UTF-8'>而不是";output.csv";
正如BoarGules正确指出的那样:
a_file
是表示文件的Python对象。但您的代码将其视为文件名:file_location = f"/Beeg-Yoishi/{a_file}"
。那不应该是file_location = f"/Beeg-Yoishi/output.csv"
吗
实际上,上传的Dropbox文件名是通过第二个参数设置为files_upload
的,该参数被设置为file_location
变量。
2.
我收到一个错误,说我无法查看该文件。
上传的实际数据通过第一个参数设置为files_upload
,此处设置为reader
。这是一个csv阅读器对象,而不是实际的数据。应该是类似f.read()
的内容。