顾名思义,这是一个用于处理导入和导出数据的库。django-import-export库支持多种格式,包括xls、csv、json、yaml以及tablib支持的所有其他格式。它还有一个Django管理集成,使用起来非常方便。

安装插件

使用PIP安装

pip install django-import-export

更新settings.py:

INSTALLED_APPS = (

...

'import_export',

)

还有一个可选的配置,我通常这样添加:

IMPORT_EXPORT_USE_TRANSACTIONS = True

默认值为False。它确定库是否会在数据导入中使用数据库事务,以确保安全。

Resources

django-import-export库使用Resource的概念,它的类定义非常类似于Django处理模型表单和管理类的方式。

在文档中,作者建议将与资源相关的代码放在admin.py文件。但是,如果实现与Django admin没有关系,我通常更喜欢在app文件夹里创建一个名为resources.py。

models.py

from django.db import models

class Person(models.Model):

name = models.CharField(max_length=30)

email = models.EmailField(blank=True)

birth_date = models.DateField()

location = models.CharField(max_length=100, blank=True)

resources.py

from import_export import resources

from .models import Person

class PersonResource(resources.ModelResource):

class Meta:

model = Person

这是最简单的定义。您可以将几个配置传递给元类,如:fields, exclude

导出数据

导出数据到CSV

from .resources import PersonResource

person_resource = PersonResource()

dataset = person_resource.export()

dataset.csv

id,name,email,birth_date,location

1,John,john@doe.com,2016-08-11,Helsinki

2,Peter,peter@example.com,2016-08-11,Helsinki

3,Maria,maria@gmail.com,2016-08-11,Barcelona

4,Vitor,vitor@freitas.com,2016-08-11,Oulu

5,Erica,erica@gmail.com,2016-08-11,Oulu

导出数据到JSON

dataset.json

[

{"id": 1, "name": "John", "email": "john@doe.com", "birth_date": "2016-08-11", "location": "Helsinki"},

{"id": 2, "name": "Peter", "email": "peter@example.com", "birth_date": "2016-08-11", "location": "Helsinki"},

{"id": 3, "name": "Maria", "email": "maria@gmail.com", "birth_date": "2016-08-11", "location": "Barcelona"},

{"id": 4, "name": "Vitor", "email": "vitor@freitas.com", "birth_date": "2016-08-11", "location": "Oulu"},

{"id": 5, "name": "Erica", "email": "erica@gmail.com", "birth_date": "2016-08-11", "location": "Oulu"}

]

导出数据到YAML

dataset.yaml

- {birth_date: '2016-08-11', email: john@doe.com, id: 1, location: Helsinki, name: John}

- {birth_date: '2016-08-11', email: peter@example.com, id: 2, location: Helsinki, name: Peter}

- {birth_date: '2016-08-11', email: maria@gmail.com, id: 3, location: Barcelona, name: Maria}

- {birth_date: '2016-08-11', email: vitor@freitas.com, id: 4, location: Oulu, name: Vitor}

- {birth_date: '2016-08-11', email: erica@gmail.com, id: 5, location: Oulu, name: Erica}

过滤数据

from .resources import PersonResource

from .models import Person

person_resource = PersonResource()

queryset = Person.objects.filter(location='Helsinki')

dataset = person_resource.export(queryset)

dataset.yaml

- {birth_date: '2016-08-11', email: john@doe.com, id: 1, location: Helsinki, name: John}

- {birth_date: '2016-08-11', email: peter@example.com, id: 2, location: Helsinki, name: Peter}

视图的例子

导出到CSV视图

from django.http import HttpResponse

from .resources import PersonResource

def export(request):

person_resource = PersonResource()

dataset = person_resource.export()

response = HttpResponse(dataset.csv, content_type='text/csv')

response['Content-Disposition'] = 'attachment; filename="persons.csv"'

return response

导出到Excel视图

from django.http import HttpResponse

from .resources import PersonResource

def export(request):

person_resource = PersonResource()

dataset = person_resource.export()

response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel')

response['Content-Disposition'] = 'attachment; filename="persons.xls"'

return response

导入数据

查看new_persons.csv的数据:

name,email,birth_date,location,id

Jessica,jessica@jones.com,2016-08-11,New York,

Mikko,mikko@suomi.com,2016-08-11,Jyväskyla,

id必须存在,因为它是主键。但是它会生成,所以我们不需要指定值。

import.html

{% extends 'base.html' %}

{% block content %}

{% csrf_token %}

Upload

{% endblock %}

views.py

from tablib import Dataset

def simple_upload(request):

if request.method == 'POST':

person_resource = PersonResource()

dataset = Dataset()

new_persons = request.FILES['myfile']

imported_data = dataset.load(new_persons.read())

result = person_resource.import_data(dataset, dry_run=True)  # Test the data import

if not result.has_errors():

person_resource.import_data(dataset, dry_run=False)  # Actually import now

return render(request, 'core/simple_upload.html')

Django后台管理

在admin.py里使用ImportExportModelAdmin,而不是ModelAdmin

from import_export.admin import ImportExportModelAdmin

from django.contrib import admin

from .models import Person

@admin.register(Person)

class PersonAdmin(ImportExportModelAdmin):

pass

添加之后刷新页面你就会看到导入和导出按钮。

在导入现有项目时,导入功能具有良好的差异性:

这是一个大的Django库。你可以用它做更多的事情。它的文档完全值得一看:API reference.

python export_django-import-export插件使用教程相关推荐

  1. opencart导入导出export/import功能插件

    2019独角兽企业重金招聘Python工程师标准>>> 本版本仅适用于 opencart 1.5.5及 opencart 1.5.5.1,请下载者注意. 功能:网站管理员可以进行批量 ...

  2. linux rpm找不到命令_linux环境下 python环境import找不到自定义的模块

    linux环境下 python环境import找不到自定义的模块 问题现象: Linux环境中自定义的模块swport,import swport 出错.swport模块在/root/sw/目录下. ...

  3. 记录使用Vue过程中的各种插件及教程(不定时更新)

    本文为整理记录本人从18年初开始上手使用Vue以后,针对项目中业务需求所用到的各种插件及教程整理?. 目前市场上常用的三大Vue桌面端UI组件库:Element.iView.Ant Design Vu ...

  4. gazebo入门_【ROS-Gazebo】仿真插件编写教程(1)——概述

    前言 本系列教程的主要是对 Gazebo的官网教程 的翻译与理解.之前查找国内的中文资料,发现并没有关于如何编写Gazebo插件的教程.据我猜测,大概是因为这个技能属于"两不管"地 ...

  5. python的import与from...import的不同之处

    在python用import或者from...import来导入相应的模块.模块其实就是一些函数和类的集合文件,它能实现一些相 应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序 ...

  6. python 贴吧自动回复机-Python实现微信自动回复机器人详细教程

    首先,我们需要安装并配置好Python环境,并安装requests和itchat包,我用的是Windows7环境! https://www.python.org/ python官网 下载 然后直接打开 ...

  7. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程

    用Python的turtle库绘图是很简单的,闲来无事就画了一个玫瑰花,下面奉上源码.... 源码: ''' Created on Nov 18, 2017 @author: QiZhao ''' i ...

  8. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  9. python3.7.2安装包_Win10下python 2.7与python 3.7双环境安装教程图解

    Win10下python 2.7与python 3.7双环境安装教程,具体内容如下所示: 1.python软件下载网址: https://www.python.org/downloads/window ...

  10. python datasets 下载_Python机器学习·微教程

    Python目前是机器学习领域增长最快速的编程语言之一. 该教程共分为11小节.在这个教程里,你将学会: 如何处理数据集,并构建精确的预测模型 使用Python完成真实的机器学习项目 这是一个非常简洁 ...

最新文章

  1. 107. Binary Tree Level Order Traversal II
  2. 【SSH网上商城项目实战23】完成在线支付功能
  3. java从控制台输入数组_Java将控制台输入的一行整数转成整型数组
  4. 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
  5. java ascii码从小到大排序_待签名参数按照字段名的ascii码从小到大排序 怎么理解...
  6. Bootstrap table列内容过长,显示固定长度,超过内容隐藏
  7. Java基础篇:字符串的简单介绍
  8. mac版ps快捷键大全
  9. Linux安装expect命令
  10. linux 如何配置无线网卡驱动,Linux配置无线网卡驱动实现无线上网
  11. Python -- 使用if语句处理列表
  12. 2022-2023上学期 奖状的清单
  13. win8.1系统在线安装VS2017出现Internet连接问题的解决办法
  14. woa13数据的Matlab处理,基于WOA13数据的赤道大西洋海区温度锋的时空分布特征-海洋预报.PDF...
  15. Office2016无法启动安装,正在进行另一个安装操作
  16. 飞鸽传书源码分析-程序启动过程
  17. Codeforces Beta Round #7
  18. MongoDB-Java的两个基本操作Upsert和insertMany
  19. 金刚石清洗用超纯水设备
  20. 机器学习十大算法系类

热门文章

  1. PAT乙级(1022 D进制的A+B )
  2. 基础知识—表达式与语句-表达式
  3. aix如何查看日志策略_aix的日志的一些操作理解
  4. er图用什么软件_工艺流程图用什么软件做?规范实用的流程图工具
  5. python中json如何存放字节数组中_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)...
  6. 链家大数据多维分析引擎实践
  7. 掌握鸿蒙轻内核静态内存的使用,从源码分析开始
  8. 架构解读丨Volcano作业资源预留设计原理
  9. 收藏!数据建模最全知识体系解读
  10. 5G边缘计算:开源架起5G MEC生态发展新通路