1. django 項目提供了一個導出的方法 python manage.py dumpdata, 不指定 appname 時默認爲導出全部的appphp
1
|
python manage.py dumpdata [appname] > appname_data.json
|
好比咱們有一個項目叫 mysite, 裏面有一個 app 叫 blog ,咱們想導出 blog 的全部數據python
1
|
python manage.py dumpdata blog > blog_dump.json
|
2. 數據導入,不須要指定 appnamemysql
1
|
python manage.py loaddata blog_dump.json
|
備註:一些經常使用的sql
1
|
python manage.py dumpdata auth > auth.json
# 導出用戶數據
|
優勢:能夠兼容各類支持的數據庫,也就是說,之前用的是 SQLite3,能夠導出後,用這種方法導入到 MySQL, PostgreSQL等數據庫,反過來也能夠。shell
缺點:數據量大的時候,速度相對較慢,表的關係比較複雜的時候能夠導入不成功。數據庫
2.1. 用 Django 自帶的命令django
好比早期咱們爲了開發方便,用的sqlite3數據庫,後來發現網站數據太多,sqlite3性能有點跟不上了,想換成postgreSQL,或者 MySQL的時候。json
若是還我還使用上面的命令,若是你運氣好的話,也許會導入成功,流程以下:bash
2.1.1. 從原來的整個數據庫導出全部數據服務器
1
|
python manage.py dumpdata > mysite_all_data.json
|
2.1.2. 將mysite_all_data.json傳送到另外一個服務器或電腦上導入
1
|
python manage.py loaddata mysite_all_data.json
|
若是你運氣好的話可能會導入完成,可是每每不那麼順利,緣由以下:
a) 咱們在寫models的時候若是用到CharField,就必定要寫max_length,在sqlite3中是不檢查這個最大長度的,你寫最大容許長度爲100,你往數據庫放10000個,sqlite3都不報錯,並且不截斷數據的長度,這彷佛是slite3的優勢,可是也給從sqlite3導入其它數據庫帶來了困難,由於MySQL和PostgreSQL數據庫都會檢查最大長度,超出時就報錯!
b) Django 自帶的contentType會致使出現一些問題
用上面的方法只遷移一個app應該問題不大,可是若是有用戶,用戶組掛鉤,事情每每變得糟糕!若是導入後沒有對數據進行修改,你能夠考慮從新導入,可能還要快一些,若是是手動在後臺輸入或者修改過,這種方法就不適用了
2.2, 用數據庫自帶的導出導入命令
預備知識:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
先輸入 mysql (好比 mysql -u root -p) 進入數據庫 shell
建立 GBK 格式的數據庫 zqxt
create database `zqxt` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
建立 UTF8 格式的數據庫 zqxt
CREATE DATABASE `zqxt` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
賦予數據庫(zqxt)權限給某用戶,能夠是已經存在的用戶或新用戶名
GRANT ALL PRIVILEGES ON zqxt.* TO
"任意用戶名"
@
"localhost"
IDENTIFIED BY
"新密碼"
;
刷新權限
FLUSH PRIVILEGES;
退出數據庫shell
EXIT;
|
假定 Django 用的數據庫名稱爲 zqxt
2.2.1 在 PostgreSQL 中:
1
2
3
4
5
6
7
|
# 導出數據庫 zqxt 到 zqxt.sql 文件中
pg_dump zqxt > zqxt.sql
# 導入數據庫到 新的服務器
psql zqxt -f zqxt.sql
#注意:數據導入導出可能須要數據庫超級權限,用 sudo su postgres 切換到數據庫超級用戶 postgres
|
2.2.2 在MySQL 中:
使用網頁工具,好比phpMyAdmin 導入導出很簡單,這裏就不說了,主要說一下命令行如何操做:
1
2
3
4
5
6
7
8
|
# 導出數據庫 zqxt 到 zqxt.sql 文件中
mysqldump -u username -p zqxt > zqxt.sql
# 導入數據庫到 新的服務器 (假設數據庫已經建立好)
cat
/path/to/zqxt
.sql | mysql -u username -p zqxt
或 mysql -u username -p zqxt <
/path/to/zqxt
.sql
或 mysql -u username -p zqxt 進入 mysql shell 後,執行
source
/path/to/zqxt
.sql
# 輸入密碼開始導入數據
|
注意:在cmd中執行導出命令時會出現錯誤:'mysqldump' 不是內部或外部命令,也不是可運行的程序或批處理文件。
解決辦法:進入MySQL的安裝目錄下,譬如我把mysql裝在了c盤,就到c:\mysql\bin下才能運行。文件存儲在數據庫相關的項目所在位置中。
總結:其它的數據庫,請自行搜索如何導入導出,整個數據庫導出的好處就是對數據之間的關係處理比較省事,好比自強學堂裏面的不少教程,上一篇和下一篇是一個一對一的關係,這樣的話用 python manage.py dumpdata 沒法導出教程與教程的關係,可是數據庫整個導出就沒有任何問題,固然也能夠寫一個腳本去導出關係再導入。Django 自帶的 python manage.py dumpdata 和 python manage.py loaddata 最大的好處就是能夠跨數據庫進行導入導出。