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