python测试开发django-176.数据库迁移数据(manage.py dumpdata)
前言
manage.py dumpdata
是 django 自带的管理命令,可以用来备份你的模型实例和数据库.
dumpdata 命令
python manage.py -h
可以看到有个dumpdata 命令,用于备份数据库,把数据库表的内容转为 json/xml/yaml 格式
>python manage.py -h
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[authtoken]
drf_create_token
[contenttypes]
remove_stale_contenttypes
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
python manage.py dumpdata -h
查看相关参数
- -h 查看帮助文档
- --format 格式化输出导出的数据,支持导出数据格式为:json/xml/yaml
- --indent 美化json格式,json缩进空格数
- --database 指定要从中转储装置的特定数据库。默认为“default”数据库
- --exclude(-e) 选择不需要备份的app或者表
- --natural-foreign 使用外键
- -a, --all 使用Django的基本管理器转储数据库中存储的所有模型,包括那些将由自定义管理器过滤或修改的模型。
导出数据
整个 django 使用到的数据库转存到 db.json 文件中(备份整个数据库)
python manage.py dumpdata > db.json
将 yoyo app 转存到 admin.json 中(备份特定的 app)
python manage.py dumpdata yoyo > yoyo.json
将 django.admin.logentry 表中的内容备份 (备份特定的表)
python manage.py dumpdata admin.logentry > logentry.json
--indent 加上一个代表空格数的数字美化json格式
python manage.py dumpdata yoyo.person --indent 2 > person.json
如 yoyo_person 这张表的数据为
导出为 person.json 后数据
[
{
"model": "yoyo.person",
"pk": 1,
"fields": {
"name": "yoyo",
"age": 111
}
},
{
"model": "yoyo.person",
"pk": 2,
"fields": {
"name": "yoyo2",
"age": 22
}
},
{
"model": "yoyo.person",
"pk": 3,
"fields": {
"name": "yoyo23",
"age": 33
}
},
{
"model": "yoyo.person",
"pk": 4,
"fields": {
"name": "yoyo",
"age": 22
}
}
]
--format 格式化输出导出的数据,支持导出数据格式为:json/xml/yaml
python manage.py dumpdata yoyo.person --indent 2 --format yaml > person.yml
导出为yml格式
- model: yoyo.person
pk: 1
fields:
name: yoyo
age: 111
- model: yoyo.person
pk: 2
fields:
name: yoyo2
age: 22
- model: yoyo.person
pk: 3
fields:
name: yoyo23
age: 33
- model: yoyo.person
pk: 4
fields:
name: yoyo
age: 22
loaddata 导入数据
Django loaddata 是 django 自带的管理命令,可以用来导入固定格式的数据到数据库
可以先清空yoyo.person表数据,再导入数据
# 将 person.json 中数据库导入数据库
python manage.py loaddata person.json
命令执行完,数据就会导入到数据库了