如何使用python向其写入数据后下载csv文件

时间:2012-11-09 10:47:28

标签: python csv web.py

我正在使用web.py并创建一个基本网页

我有一个基本的html代码,其中有一个按钮,如下所示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Home</title>
</head>
<body>
   <form method="POST" action="/retrieve">
      <button id="submit" name="submit">Retrieve</button>
   </form>
</body>

通过上面的代码,我可以看到页面上的按钮,当我们点击按钮Retrieve时,动作属性激活并转到执行操作所需的路径

index.py 代码

import web
import csv

urls = (
  '/retrieve',   'Retrieve',
)

app = web.application(urls, globals())
conn = mdb.connect(user='root', passwd='redhat', db='Merion_dev', host='localhost')

class Retrieve:

    def POST(self):
        cursor = conn.cursor()
        query = "SELECT * FROM adm_facility LIMIT 0,10 "
        cursor.execute(query)
        result = cursor.fetchall() 
        csv_file = csv.writer(open('Test_File.csv', 'wb'))
        csv_file.writerow(['Facility_id', 'Name', 'Account Number', 'Street'])
        for i in result :
            csv_file.writerow([i[0],i[2],i[3],i[4]])
        raise web.seeother('/retrieve')

if __name__ == "__main__":
    web.internalerror = web.debugerror
    app.run()  

因此,当我运行上面的代码时,通过写入的select查询,使用数据库中的数据成功创建了一个csv文件。

现在我想要做的是,当我们点击检索按钮时,数据应写入csv文件,应该像

一样下载

phpmyadmin当我们点击export按钮时,我们会根据我们的选择以不同的格式下载文件,所以在这里我要保存数据后下载文件(csv)它

任何人都可以让我知道

  1. 我们如何通过上述代码将数据保存到csv文件后下载

  2. 我们如何使用python一般下载csv文件?

1 个答案:

答案 0 :(得分:2)

您不必将其写入文件,您可以使用StringIO:

from StringIO import StringIO
import csv

import web

urls = (
  '/retrieve',   'Retrieve',
)

app = web.application(urls, globals())
conn = mdb.connect(user='root', passwd='redhat', db='Merion_dev', host='localhost')

class Retrieve:

    def POST(self):
        cursor = conn.cursor()
        query = "SELECT * FROM adm_facility LIMIT 0,10 "
        cursor.execute(query)
        result = cursor.fetchall() 
        csv_file = StringIO()
        csv_writer = csv.writer(csv_file)
        csv_writer.writerow(['Facility_id', 'Name', 'Account Number', 'Street'])
        for i in result :
            csv_writer.writerow([i[0],i[2],i[3],i[4]])
        web.header('Content-Type','text/csv')
        web.header('Content-disposition', 'attachment; filename=yourfilename.csv')
        return csv_file.getvalue()

if __name__ == "__main__":
    web.internalerror = web.debugerror
    app.run()