直接上代码:

def download(request):
# 从数据库查询数据
data_list = Info.objects.all() # 定义返回对象
response = HttpResponse()
# 给返回对象定义解析类型
response['Content-Type'] = 'csv'
# 声明一个csv的响应
response['Content-Disposition'] = 'attachment;filename="data.csv"'
# csv的响应编码格式声明
response.write(codecs.BOM_UTF8) # 把响应设置成文件句柄
writer_obj = csv.writer(response)
# 先写入表格头
writer_obj.writerow(["姓名", "年龄", "地址"])
# 写入数据
for info in data_list:
writer_obj.writerow([info.name, info.age, info.address]) return response

参考1:

https://www.cnblogs.com/haoshine/p/5695760.html

import csv
import codecs
import datetime
from django.db import connection
from django.contrib.auth.models import User
from django.http import HttpResponse
from models import * def output(request, user_id, node_id, function_id):
function_id = int(function_id)
user_id = int(user_id)
node_id= int(node_id) # 指定csv请求回应
response = HttpResponse(content_type='text/csv') user = User.objects.get(id=user_id)
functions_has_permission = DataPermission.objects.filter(category=node_id) # 取出sql语句
function_obj = DataPermission.objects.get(id=function_id)
function_obj_sql = function_obj.sql # 执行sql语句,并执行。保存执行结果和字段名
cursor = connection.cursor()
cursor.execute(function_obj_sql)
results = cursor.fetchall() descriptions = cursor.description
descriptions_long = len(descriptions)
description_list = [None] * descriptions_long
i = 0
for description in descriptions:
description_list[i] = description[0]
i = i + 1 # 将执行结果从元组形式转化为列表形式。
i=0
results_long = len(results)
results_list = [None] * results_long
for i in range(results_long):
results_list[i] = list(results[i])
# print(results_list) # 为文件取名字
now = datetime.datetime.now()
now = str(now.isoformat())
name = (now + '.csv').replace(':', '') # 声明一个csv的响应
response['Content-Disposition'] = 'attachment; filename="%s"' % name
# csv的响应的编码格式声明
response.write(codecs.BOM_UTF8)
writer = csv.writer(response) # 转码问题
a = u'中'
for result in results_list:
i=0
for item in result:
if type(item) == type(a):
# 如果是unicode类型,那么编码成utf-8
result[i] = item.encode('utf-8')
i = i + 1
# with open(response, 'wb') as f:
writer.writerow(description_list)
for result in results_list:
writer.writerow(result)
i = i + 1
response.close()
return response

参考

导出的文件,中文如果显示成乱码

解决方法:将上面代码中的'utf-8' 改成 'gb2312'

result[i] = item.encode('gb2312')

参考2:

抽取数据库文件:

def exportmysql(request):
conn= MySQLdb.connect(
host='192.168.137.3',
port = 3306,
user='root',
passwd='',
db ='DEVOPS',
charset='UTF8'
)
cur = conn.cursor()
a = cur.execute("select ip,info,env from machine_info")
info = cur.fetchall()
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
writer = csv.writer(response)
for row in info:
writer.writerow(row)
return response

参考3:

最近一个用django开发的web项目要进行数据的导入导出,所以有必要了解下。

django中主要用HttpResponse将请求结果返回给浏览器,所以文件的下载也是通过改对象进行处理的,具体的一个列子的代码如下:

[python] view plain copy
#文件下载
def download(request):
"""
Send a file through Django without loading the whole file into
memory at once. The FileWrapper will turn the file object into an
iterator for chunks of 8KB.
""" #读取mongodb的文件到临时文件中
fileid_=request.GET["fileid"]
filepath_ = ('%s/%s'%(MEDIA_ROOT, fileid_)) #文件全路径
file_=TFiles.objects.get(fileid=int(fileid_))
filename_=file_.filename
filetype_=file_.filetype if os.path.isfile(filepath_):
pass
else:
mongoLoad(fileid_) #下载文件
def readFile(fn, buf_size=262144):#大文件下载,设定缓存大小
f = open(fn, "rb")
while True:#循环读取
c = f.read(buf_size)
if c:
yield c
else:
break
f.close()
response = HttpResponse(readFile(filepath_), content_type='APPLICATION/OCTET-STREAM') #设定文件头,这种设定可以让任意文件都能正确下载,而且已知文本文件不是本地打开
response['Content-Disposition'] = 'attachment; filename='+filename_.encode('utf-8') + filetype_.encode('utf-8')#设定传输给客户端的文件名称
response['Content-Length'] = os.path.getsize(filepath_)#传输给客户端的文件大小
return response

=====================

Python+Django实现文件的下载

HttpResponse,  StreamingHttpResponse,  FileResponse

https://blog.csdn.net/li627528647/article/details/77544136

数据库数据导出CSV文件,浏览器下载的更多相关文章

  1. C#将DataTable数据导出CSV文件

    C#将DataTable数据导出CSV文件通用方法! //导出按钮调用导出方法    protected void btnCSV_Click(object sender, EventArgs e)   ...

  2. 从数据库中导出.csv文件

    需求: 本次将数据库中的数据导出成.csv文件(office可以打开), //数据的生成,根据你所选中的数据进行生成 //params:$activity_id -> 活动的id //param ...

  3. 彻底理解使用JavaScript 将Json数据导出CSV文件

    前言 将数据报表导出,是web数据报告展示常用的附带功能.通常这种功能都是用后端开发人员编写的.今天我们主要讲的是直接通过前端js将数据导出Excel的CSV格式的文件. 原理 首先在本地用Excel ...

  4. Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)

    public class ExportExcelServlet extends HttpServlet { /** * */ private static final long serialVersi ...

  5. DataTable数据导出CSV文件

    public static void SaveAsExcel(DataTable dt1) { //System.Windows.Forms.SaveFileDialog sfd = new Syst ...

  6. java web 读取数据库数据写入Excel返回浏览器下载

    @RequestMapping(value = "/download", method = RequestMethod.GET) public void downstudents( ...

  7. l如何把SQLServer表数据导出CSV文件,并带列名

    http://jingyan.baidu.com/article/4b07be3c466b5d48b280f37f.html 微信公众号:

  8. PHP导出数据到CSV文件函数/方法

    如果不清楚什么是CSV文件,可看如下文章介绍  CSV格式的是什么文件?CSV是什么的缩写? /** * 导出数据到CSV文件 * @param array $data 数据 * @param arr ...

  9. mysql 导出数据到csv文件的命令

    1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ...

随机推荐

  1. k8s 如何 Failover?

    上一节我们有 3 个 nginx 副本分别运行在 k8s-node1 和 k8s-node2 上.现在模拟 k8s-node2 故障,关闭该节点. 等待一段时间,Kubernetes 会检查到 k8s ...

  2. 通过例子理解 k8s 架构【转】

    为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replic ...

  3. django连接Oracle过程中出现的问题

    开始时版本信息: python 3.6   +   ce_oracle 6 最终版本信息: python 3.5   + ce_oracle 5.2 ce_oracle版本问题 cx_Oracle-5 ...

  4. k8s master init and add node

    目录 一. add google apt-key 二. k8s master init 三. k8s node add to master cluster(use this command when ...

  5. shell脚本,判断给出的字符串是否相等。

    第一种方法[root@localhost wyb]# .sh #!/bin/bash #判断给出的字符串是否相等 read -p "Please Input a number:" ...

  6. ECMAScript 继承机制实现

    继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手.所有开发者定义的类都可作为基类.出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码 ...

  7. 【树形dp】7.14城市

    很典型的按照边考虑贡献的题. 题目描述 小A居住的城市可以认为由n个街区组成.街区从1到n依次标号街区与街区之间由街道相连,每个街区都可以通过若干条街道到达任意一个街区,共有n-1条街道.其中标号为i ...

  8. RN踩坑

    使用夜神 使用夜神作为模拟器,这个模拟器启动就会监听62001端口. 开发工具与模拟器的通信都是通过adb.夜神模拟器的安装目录/bin下有一个adb.exe,android sdk tools下也有 ...

  9. 绑定用户id,用户权限认证

    上面这个就是为了把user_id与文章关联起来 文章需要跟用户关联,所以要去文章模型中加以关联 这样就可以直接在模板中进行关联处理 权限认证 首先要创建policy php artisan make: ...

  10. 关于ajax在微信智能客服管理端的使用

    ajax的语法样例: $.ajax({ 'url':url, 'type':'GET', 'dataType':'json', 'data':data, success:function (data) ...