問(wèn)題:當(dāng)部署 Django Server 時(shí),有一些數(shù)據(jù)要在運(yùn)行前初始化到數(shù)據(jù)庫(kù)中,如何初始化就是我們要解決的問(wèn)題
開(kāi)發(fā)環(huán)境
System:Ubuntu 14.04.1 LTS
IDE:Pycharm 2018.1.2
Django:1.11.13
初始化數(shù)據(jù)入數(shù)據(jù)庫(kù)
在 app 下創(chuàng)建 fixtures,再創(chuàng)建初始化文件 initial_data.json/xml/yaml,三種格式均可。
- 編寫初始化文件
initial_data.json
[
{
"model": "myapp.person",
"pk": 1,
"fields": {
"first_name": "John",
"last_name": "Lennon"
}
},
{
"model": "myapp.person",
"pk": 2,
"fields": {
"first_name": "Paul",
"last_name": "McCartney"
}
}
]
initial_data.yaml
- model: myapp.person
pk: 1
fields:
first_name: John
last_name: Lennon
- model: myapp.person
pk: 2
fields:
first_name: Paul
last_name: McCartney
- 把上面的數(shù)據(jù)同步到數(shù)據(jù)庫(kù)中
$ python manage.py loaddata initial_data.yaml # 此處不用寫具體路徑,只要文件在當(dāng)前 app/fixtures/ 目錄下即可
導(dǎo)出數(shù)據(jù)庫(kù)內(nèi)容為初始化文件
$ mkdir appname/fixtures # 必須有 fixtures 目錄,下面語(yǔ)句才能成功執(zhí)行
$ python manage.py dumpdata --format=json appname > appname/fixtures/initial_data.json
說(shuō)明: 在不同 app 下相同名字的初始化文件,執(zhí)行初始化命令時(shí),會(huì)同時(shí)都執(zhí)行完成。
# 假設(shè)有兩個(gè) app 下同時(shí)存在 initial_data.yaml
$ python manage.py loaddata initial_data.yaml
Installed 12 object(s) from 2 fixture(s) # 此處為兩張表共插入12條初始化數(shù)據(jù)