所以我在这里找到了很多关于如何从GAE下载数据到csv的好信息..我遇到的问题是如何导出多个csv文件
要点: 我有一个webapp,它接受多个输入,每个输入,它将数据发送到数据存储区,然后从数据存储区写入csv。示例代码如下:
class RunScript(webapp2.RequestHandler):
def post(self):
listOfTickers = self.request.get('Stocks').split(", ")
for i in listOfTickers:
self.main(cgi.escape(i))
main方法调用其他函数来获取数据,最后通过以下代码写入csv:
item_query=Item.query().order(Item.keyOfItem).fetch()
self.response.headers['Content-Type'] = 'text/csv'
self.response.headers['Content-Disposition'] = 'attachment; filename=file.csv'
writer = csv.writer(self.response.out)
for a in item_query:
rowToWrite=a.row+a.value
writer.writerow(rowToWrite)
#empty datastore as data is drawn out
a.key.delete()
此时,子函数结束,我们回到post()函数中的for循环。我认为子函数结束会触发GAE下载第一个csv,然后再次通过代码后再下载第二个csv。然而,发生的事情是我最后得到一个csv,其中包含两组数据。
有关为何发生这种情况的任何想法?任何帮助表示赞赏!
答案 0 :(得分:1)
您继续将数据写入同一响应,即写入同一文件。响应无法返回多个文件。
您应该创建多个文件,将它们一起存档到一个文件中,然后返回此存档。
答案 1 :(得分:0)
要创建包含多个单独数据的响应,您应该查看multipart
content type。这通常用于请求发送多部分表单数据,但也可以用于响应。
浏览器支持多部分响应:Browser support of multipart responses
答案 2 :(得分:0)
作为替代方案,您也可以将cvs写入单个zip存档。
或者您可以将csv文件写入cloudstorage并使用cloudstorage下载文件(如果需要)。
有关使用cloudstorage的信息,请参阅this gist。它包含一个创建zip存档的示例。