django-import-export 插件

之前对 mysql 不是很熟悉,偷懒一直用 sqlite3 作为 django 的默认数据库.后来嘛,时代变了,一直琢磨这如何把数据从 sqlite3 导入到 mysql 中去.

经过一番 stackoverflow 找到如下两种方案:

  • 通过脚本连接两个数据库,做数据的传递(感觉麻烦,而且过程中一定会有很多坑等着我)
  • 通过 django 的 crm 管理系统写脚本传递数据(不用自己写 sql 语句,逻辑上清晰,感觉可用)

当然了,就在我决定使用第二种方式之前,我决定还是问问老大,有没有什么更好的办法.一番说明之后,老大推荐我去看看 django-import-export 这个插件.

了解之后,心中大呼,真特么神器.评价一下就是 真-无痛-数据库迁移

简单来说,他的工作原理是从现在的数据库终到处特定格式的数据(csv,xsl等),再导入到其他数据库中.

文档地址: https://django-import-export.readthedocs.io/en/stable/index.html

文档说的很详细了,简要描述一下整个过程

1、 pip 安装 django-import-export

2、 在 settings.py 中添加 import-export app

INSTALLED_APPS = [
	# ...
    'import_export',
    'django.contrib.admin',
    # ...
]

2.1 、收集 static 文件

$ python manage.py collectstatic

3、 修改 admin.py

这里给出的代码示例的前提是,不做任何处理,完全导出数据库内的数据。实际上 django-import-export 还可以做更多。

# Proxy 为 models 中的 table
from django.contrib import admin
from .models import Proxy
from import_export import resources
from import_export.admin import ImportExportModelAdmin

class ProxyResource(resources.ModelResource):
    class Meta:
        model = Proxy

@admin.register(Proxy)
class ProxyAdmin(ImportExportModelAdmin):
    resource_class = ProxyResource
	# ...

如此,在网页 admin 终应该可以看到如下内容

点击右上角的 export 按钮,选择导出类型,便可导出现有数据库内所有数据。

4、修改 settings.py 文件

将原有的 sqlite3 改为 mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'databasename',
        'USER': 'username',
        'PASSWORD': 'password',
    }
}

5、mysql 设置

根据 settings 中的设置,在 mysql 中建表建user,参考 https://www.digitalocean.com/community/tutorials/how-to-use-mysql-or-mariadb-with-your-django-application-on-ubuntu-14-04

6、迁移基础设置

$ python manage.py makemigrations
$ python manage.py migrate

7、迁移数据

进入 admin 页面,点击 import 按钮,导入数据,稍等即可。

8、后记

我这边试过 10000+ 条数据的导入导出,如果数据量特别大的话,最好分次导入。

posted @ 2017-07-01 13:34  zx576  阅读(2961)  评论(0编辑  收藏  举报