日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 数据导入和导出

發布時間:2023/12/2 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 数据导入和导出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,簡單的數據導出與導入(簡單的遷移)

1. django 項目提供了一個導出的方法 python manage.py dumpdata, 不指定 appname 時默認為導出所有的app

1 python?manage.py?dumpdata?[appname]?>?appname_data.json

比如我們有一個項目叫 mysite, 里面有一個 app 叫 blog ,我們想導出 blog 的所有數據

1 python?manage.py?dumpdata?blog?>?blog_dump.json

2. 數據導入,不需要指定 appname

1 python?manage.py?loaddata?blog_dump.json

備注:一些常用的

1 python?manage.py?dumpdata?auth?>?auth.json?#?導出用戶數據

優點:可以兼容各種支持的數據庫,也就是說,以前用的是 SQLite3,可以導出后,用這種方法導入到 MySQL, PostgreSQL等數據庫,反過來也可以。

缺點:數據量大的時候,速度相對較慢,表的關系比較復雜的時候可以導入不成功。

二,數據庫的遷移

2.1. ?用 Django 自帶的命令

比如早期我們為了開發方便,用的sqlite3數據庫,后來發現網站數據太多,sqlite3性能有點跟不上了,想換成postgreSQL,或者 MySQL的時候。

如果還我還使用上面的命令,如果你運氣好的話,也許會導入成功,流程如下:

?

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 最大的好處就是可以跨數據庫進行導入導出。

轉載于:https://www.cnblogs.com/xyyhcn/p/10775158.html

總結

以上是生活随笔為你收集整理的Django 数据导入和导出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。