Django如何簡單的一條命令將數據庫數據導出保存到本地?fixtures你應該看下

    在平常開發中,有的時候須要將數據庫的測試數據導出來再另外一臺機器上運行,你可能會選擇寫一個導出數據的自定義命令將數據庫數據導出爲Excel表的形式,再在另外一臺機器上測試數據的時候再將Excel的數據導入到數據庫中,這樣會比較麻煩。可能你認爲是十幾行或者幾十行代碼的事情,可是我這我的就是懶啊,十幾行的代碼我也不想寫。python

    因而我就想,Django是出了名的便利,裏面集成了不少的工具和功能,不須要再重複造輪子了,你說有沒有可能這個輪子已經造好了呢,因而我就找啊找,巧了,我找到一個關鍵字fixtures,聽說是Django自帶的(我目前使用的Django版本是2.0)而後我去官方文檔上翻,最後在官方的wiki上找到了它的定義數據庫

裏面講述到fixtures在你的應用測試期間提供了很是方便的將數據庫數據導入保存在本地文件中,在須要測試的時候,再將本地數據導入到數據庫中。json

首先你的在你的設置中設置好你要講app models中對應的數據導出的文件路徑app

FIXTURE_DIRS = (
   os.path.join(BASE_DIR, 'your_app/fixtures/'),
)

這是我項目中的列子,我把app中的數據所有倒出到app/fixtures/下面工具

設置好路徑以後咱們再執行下面的命令將app/models中對應的數據導入到相應的路徑下面測試

python manage.py dumpdata --format=json item > your_app/fixtures/data.json3d

咱們來看下這個命令,dumpdata是Django manage自帶的命令, --format=json 是定義數據導出到文件的格式爲json數據形式,>後面的是導入的路徑以及保存的文件名.code

這個時候就會將數據保存到本地。。orm

其保存的數據格式是這樣的blog

[{"model": "item.brands", "pk": 204, "fields": {"cn_name": "\u6d77\u5916\u8d2d\u54c1\u724c", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 205, "fields": {"cn_name": "\u67cf\u7433", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 206, "fields": {"cn_name": "\u4f18\u8d1d\u65bd", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 207, "fields": {"cn_name": "\u4e1d\u5854\u8299", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 208, "fields": {"cn_name": "\u4e49\u4e4c\u91c7\u8d2d", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 209, "fields": {"cn_name": "2080", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 210, "fields": {"cn_name": "\u6fb3\u6d322N", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 211, "fields": {"cn_name": "3CE", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 212, "fields": {"cn_name": "\u82f1\u56fdAA\u7f51", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 213, "fields": {"cn_name": "\u96c5\u6f3e", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 214, "fields": {"cn_name": "BASS", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 215, "fields": {"cn_name": "\u8d1d\u89c8\u5f97", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 216, "fields": {"cn_name": "MICCOSMO", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 217, "fields": {"cn_name": "cure\u9177\u96c5", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 218, "fields": {"cn_name": "\u7a00\u62c9\u514b\u513f", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 219, "fields": {"cn_name": "\u8fea\u51ef\u745e", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", "pk": 220, "fields": {"cn_name": "Dr.Cox\u8fea\u67ef\u601d", "cn_name_abridge": null, "en_name": null, "form_country": null, "key_word": null, "brand_about": null, "photo_id": null, "status": "normal"}}, {"model": "item.brands", ........

全是json數據格式,這些都是你數據庫中的數據。你成功的將它們導出。

那麼咱們如何將它們再導入的數據中呢?

首先咱們執行python manage.py flush命令將Django models對應的數據庫中的數據所有清空。

再執行python manage.py loaddata data.json命令,這個時候Django就會遍歷你settings中設置的FIXTURE_DIRS路徑下面找到對應的data.json的文件將其導入到對應的models下面。

 

沒錯就是這樣簡單,你可能還不太理解,可是我建議你親自試一試,才知道其便利之處。。

相關文章
相關標籤/搜索