数据库数据导出CSV文件,浏览器下载
直接上代码:
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文件,浏览器下载的更多相关文章
- C#将DataTable数据导出CSV文件
C#将DataTable数据导出CSV文件通用方法! //导出按钮调用导出方法 protected void btnCSV_Click(object sender, EventArgs e) ...
- 从数据库中导出.csv文件
需求: 本次将数据库中的数据导出成.csv文件(office可以打开), //数据的生成,根据你所选中的数据进行生成 //params:$activity_id -> 活动的id //param ...
- 彻底理解使用JavaScript 将Json数据导出CSV文件
前言 将数据报表导出,是web数据报告展示常用的附带功能.通常这种功能都是用后端开发人员编写的.今天我们主要讲的是直接通过前端js将数据导出Excel的CSV格式的文件. 原理 首先在本地用Excel ...
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
public class ExportExcelServlet extends HttpServlet { /** * */ private static final long serialVersi ...
- DataTable数据导出CSV文件
public static void SaveAsExcel(DataTable dt1) { //System.Windows.Forms.SaveFileDialog sfd = new Syst ...
- java web 读取数据库数据写入Excel返回浏览器下载
@RequestMapping(value = "/download", method = RequestMethod.GET) public void downstudents( ...
- l如何把SQLServer表数据导出CSV文件,并带列名
http://jingyan.baidu.com/article/4b07be3c466b5d48b280f37f.html 微信公众号:
- PHP导出数据到CSV文件函数/方法
如果不清楚什么是CSV文件,可看如下文章介绍 CSV格式的是什么文件?CSV是什么的缩写? /** * 导出数据到CSV文件 * @param array $data 数据 * @param arr ...
- mysql 导出数据到csv文件的命令
1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ...
随机推荐
- Velocity模板语法说明
Velocity基本语法 "#"用来标识Velocity的关键字,包括#set.#if .#else.#end.#foreach.#end.#include.#parse.#mac ...
- Flask——基础知识
Flask应用程序 一个简单的Flask应用程序 # 导入flask程序 from flask import Flask # 初始化flask对象 app = Flask(__name__) # 装饰 ...
- Mac OS 终端强化美化:iterm2 + zsh + oh~my~zsh 设置教程
为了获得更好的排版效果,文章改用markdown撰写,故重发一次. 前言 mac自带的terminal终端没有文件名高亮等功能,而且界面不是很好看,故今晚学舍友折腾了终端,可以让自己使用起来更加方便, ...
- docker系列之安装配置-2
1.docker安装 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 目前,C ...
- 如何快速获取当前链接?后面的内容,location.search、页面滚动
function request() { var urlStr = location.search; ) { theRequest={}; return; } urlStr = urlStr.subs ...
- perl学习之:正则表达式
- timer event
/* linux/kernel/time/jiffies.c*/ static cycle_t jiffies_read(struct clocksource *cs) { return (cycle ...
- IRQ中断处理流程
基于Linux2.6.30.4分析IRQ中断的处理流程. 1.中断入口 /* arch/arm/kenel/entry-armv.S*/ b vector_irq + stubs_offset 2.v ...
- lombok安装、配置、使用
eclipse安装Lombok 运行安装: java -jar ${path}\lombok.jar 选择IDE所在路径点击Install/Update即可使用. 手动安装1. 将lombok.jar ...
- 在web中绘制图像 -- canvas篇
汗,不小心点击发布了.其实正在编辑中...... HTML Canvas是现代浏览器中非常棒的绘图技术,Canvas可以绘制图形,操作图片,制作游戏,创建动画等:Canvas是很容易使用的,下面我们来 ...