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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Django 数据导入和导出

發(fā)布時(shí)間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 数据导入和导出 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,簡(jiǎn)單的數(shù)據(jù)導(dǎo)出與導(dǎo)入(簡(jiǎn)單的遷移)

1. django 項(xiàng)目提供了一個(gè)導(dǎo)出的方法 python manage.py dumpdata, 不指定 appname 時(shí)默認(rèn)為導(dǎo)出所有的app

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

比如我們有一個(gè)項(xiàng)目叫 mysite, 里面有一個(gè) app 叫 blog ,我們想導(dǎo)出 blog 的所有數(shù)據(jù)

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

2. 數(shù)據(jù)導(dǎo)入,不需要指定 appname

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

備注:一些常用的

1 python?manage.py?dumpdata?auth?>?auth.json?#?導(dǎo)出用戶(hù)數(shù)據(jù)

優(yōu)點(diǎn):可以兼容各種支持的數(shù)據(jù)庫(kù),也就是說(shuō),以前用的是 SQLite3,可以導(dǎo)出后,用這種方法導(dǎo)入到 MySQL, PostgreSQL等數(shù)據(jù)庫(kù),反過(guò)來(lái)也可以。

缺點(diǎn):數(shù)據(jù)量大的時(shí)候,速度相對(duì)較慢,表的關(guān)系比較復(fù)雜的時(shí)候可以導(dǎo)入不成功。

二,數(shù)據(jù)庫(kù)的遷移

2.1. ?用 Django 自帶的命令

比如早期我們?yōu)榱碎_(kāi)發(fā)方便,用的sqlite3數(shù)據(jù)庫(kù),后來(lái)發(fā)現(xiàn)網(wǎng)站數(shù)據(jù)太多,sqlite3性能有點(diǎn)跟不上了,想換成postgreSQL,或者 MySQL的時(shí)候。

如果還我還使用上面的命令,如果你運(yùn)氣好的話,也許會(huì)導(dǎo)入成功,流程如下:

?

2.1.1. 從原來(lái)的整個(gè)數(shù)據(jù)庫(kù)導(dǎo)出所有數(shù)據(jù)

1 python?manage.py?dumpdata?>?mysite_all_data.json

2.1.2. 將mysite_all_data.json傳送到另一個(gè)服務(wù)器或電腦上導(dǎo)入

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

?

如果你運(yùn)氣好的話可能會(huì)導(dǎo)入完成,但是往往不那么順利,原因如下:

a) 我們?cè)趯?xiě)models的時(shí)候如果用到CharField,就一定要寫(xiě)max_length,在sqlite3中是不檢查這個(gè)最大長(zhǎng)度的,你寫(xiě)最大允許長(zhǎng)度為100,你往數(shù)據(jù)庫(kù)放10000個(gè),sqlite3都不報(bào)錯(cuò),而且不截?cái)鄶?shù)據(jù)的長(zhǎng)度,這似乎是slite3的優(yōu)點(diǎn),但是也給從sqlite3導(dǎo)入其它數(shù)據(jù)庫(kù)帶來(lái)了困難,因?yàn)镸ySQL和PostgreSQL數(shù)據(jù)庫(kù)都會(huì)檢查最大長(zhǎng)度,超出時(shí)就報(bào)錯(cuò)!

?

b) Django 自帶的contentType會(huì)導(dǎo)致出現(xiàn)一些問(wèn)題

用上面的方法只遷移一個(gè)app應(yīng)該問(wèn)題不大,但是如果有用戶(hù),用戶(hù)組掛鉤,事情往往變得糟糕!如果導(dǎo)入后沒(méi)有對(duì)數(shù)據(jù)進(jìn)行修改,你可以考慮重新導(dǎo)入,可能還要快一些,如果是手動(dòng)在后臺(tái)輸入或者修改過(guò),這種方法就不適用了

?

2.2, 用數(shù)據(jù)庫(kù)自帶的導(dǎo)出導(dǎo)入命令

預(yù)備知識(shí):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 先輸入?mysql?(比如?mysql?-u?root?-p)?進(jìn)入數(shù)據(jù)庫(kù)?shell 創(chuàng)建?GBK?格式的數(shù)據(jù)庫(kù)?zqxt create?database?`zqxt`?DEFAULT?CHARACTER?SET?gbk?COLLATE?gbk_chinese_ci; 創(chuàng)建?UTF8?格式的數(shù)據(jù)庫(kù)?zqxt CREATE?DATABASE?`zqxt`?DEFAULT?CHARACTER?SET?utf8?COLLATE?utf8_general_ci; 賦予數(shù)據(jù)庫(kù)(zqxt)權(quán)限給某用戶(hù),可以是已經(jīng)存在的用戶(hù)或新用戶(hù)名 GRANT?ALL?PRIVILEGES?ON?zqxt.*?TO?"任意用戶(hù)名"@"localhost"?IDENTIFIED?BY?"新密碼"; 刷新權(quán)限 FLUSH?PRIVILEGES; 退出數(shù)據(jù)庫(kù)shell EXIT;

?

假定?Django 用的數(shù)據(jù)庫(kù)名稱(chēng)為 zqxt

2.2.1 在?PostgreSQL?中:

1 2 3 4 5 6 7 #?導(dǎo)出數(shù)據(jù)庫(kù)?zqxt?到?zqxt.sql?文件中 pg_dump?zqxt?>?zqxt.sql #?導(dǎo)入數(shù)據(jù)庫(kù)到?新的服務(wù)器 psql?zqxt?-f?zqxt.sql #注意:數(shù)據(jù)導(dǎo)入導(dǎo)出可能需要數(shù)據(jù)庫(kù)超級(jí)權(quán)限,用?sudo?su?postgres?切換到數(shù)據(jù)庫(kù)超級(jí)用戶(hù)?postgres

2.2.2 在MySQL?中:

使用網(wǎng)頁(yè)工具,比如phpMyAdmin 導(dǎo)入導(dǎo)出很簡(jiǎn)單,這里就不說(shuō)了,主要說(shuō)一下命令行如何操作:

1 2 3 4 5 6 7 8 #?導(dǎo)出數(shù)據(jù)庫(kù)?zqxt?到?zqxt.sql?文件中 mysqldump?-u?username?-p zqxt?>?zqxt.sql #?導(dǎo)入數(shù)據(jù)庫(kù)到?新的服務(wù)器?(假設(shè)數(shù)據(jù)庫(kù)已經(jīng)創(chuàng)建好) cat?/path/to/zqxt.sql?|?mysql?-u?username?-p?zqxt 或?mysql?-u?username?-p?zqxt?<?/path/to/zqxt.sql 或?mysql?-u?username?-p?zqxt?進(jìn)入?mysql?shell?后,執(zhí)行?source?/path/to/zqxt.sql #?輸入密碼開(kāi)始導(dǎo)入數(shù)據(jù)

注意:在cmd中執(zhí)行導(dǎo)出命令時(shí)會(huì)出現(xiàn)錯(cuò)誤:'mysqldump' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。

解決辦法:進(jìn)入MySQL的安裝目錄下,譬如我把mysql裝在了c盤(pán),就到c:\mysql\bin下才能運(yùn)行。文件存儲(chǔ)在數(shù)據(jù)庫(kù)相關(guān)的項(xiàng)目所在位置中。

總結(jié):其它的數(shù)據(jù)庫(kù),請(qǐng)自行搜索如何導(dǎo)入導(dǎo)出,整個(gè)數(shù)據(jù)庫(kù)導(dǎo)出的好處就是對(duì)數(shù)據(jù)之間的關(guān)系處理比較省事,比如自強(qiáng)學(xué)堂里面的很多教程,上一篇和下一篇是一個(gè)一對(duì)一的關(guān)系,這樣的話用 python manage.py dumpdata 無(wú)法導(dǎo)出教程與教程的關(guān)系,但是數(shù)據(jù)庫(kù)整個(gè)導(dǎo)出就沒(méi)有任何問(wèn)題,當(dāng)然也可以寫(xiě)一個(gè)腳本去導(dǎo)出關(guān)系再導(dǎo)入。Django 自帶的 python manage.py dumpdata 和 python manage.py loaddata 最大的好處就是可以跨數(shù)據(jù)庫(kù)進(jìn)行導(dǎo)入導(dǎo)出。

轉(zhuǎn)載于:https://www.cnblogs.com/xyyhcn/p/10775158.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。