zoukankan      html  css  js  c++  java
  • 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+ 条数据的导入导出,如果数据量特别大的话,最好分次导入。

  • 相关阅读:
    学习进度十二
    学习情况记录 11
    2020寒假 13
    学习情况记录 10
    学习情况记录 09
    2020寒假 12
    学习情况记录 08
    2020寒假 11
    学习情况记录 07
    2020寒假 10
  • 原文地址:https://www.cnblogs.com/zx576/p/Django.html
Copyright © 2011-2022 走看看