我正在使用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)它
任何人都可以让我知道
我们如何通过上述代码将数据保存到csv文件后下载
我们如何使用python一般下载csv文件?
答案 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()