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+ 條數據的導入導出,如果數據量特別大的話,最好分次導入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM