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