0

我正在使用 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()  

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

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

phpmyadmin我们单击export按钮时,将根据我们的选择以不同的格式下载文件,所以在这里我想在保存数据后下载文件(csv)。

谁能告诉我

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

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

4

1 回答 1

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()  
于 2012-11-09T11:03:50.260 回答