Django Migrations:不使用第三方工具的PostgreSQL数据导入导出最优默认方案
Django + PostgreSQL:不用第三方工具的数据导入导出方案
一、导出数据
1. Django自带的dumpdata命令
这是最贴合Django开发流程的方式,导出的是和模型结构对应的JSON/XML/YAML数据,完全兼容migrations:
- 导出所有应用的数据:
python manage.py dumpdata > all_data.json - 只导出指定应用(比如
myapp)的数据:python manage.py dumpdata myapp > myapp_data.json - 精准导出单个模型(比如
myapp下的UserProfile):python manage.py dumpdata myapp.UserProfile > user_profiles.json - 如果不想导出Django内置的权限、内容类型模型,可以排除:
python manage.py dumpdata --exclude auth --exclude contenttypes > app_data.json
2. PostgreSQL原生pg_dump命令
适合直接操作数据库,导出速度更快,适合大量数据场景:
- 导出整个数据库为SQL文件:
pg_dump -U 你的数据库用户名 -d 你的数据库名 > db_dump.sql - 只导出指定表(比如
myapp_userprofile,Django模型对应的表名是应用名_模型名小写):pg_dump -U 你的数据库用户名 -d 你的数据库名 -t myapp_userprofile > userprofile_dump.sql - 导出为二进制格式(恢复时速度更快):
pg_dump -U 你的数据库用户名 -d 你的数据库名 -Fc > db_dump.dump
二、导入数据
1. Django自带的loaddata命令
和dumpdata配套使用,自动处理模型间的关联关系:
- 导入数据文件:
python manage.py loaddata all_data.json - 重要提醒:导入前必须先通过
python manage.py migrate创建好所有表结构,否则会因为找不到表报错。
2. PostgreSQL原生命令
- 导入SQL格式的备份文件:
psql -U 你的数据库用户名 -d 你的数据库名 < db_dump.sql - 导入二进制格式的备份文件(对应
pg_dump -Fc的导出):pg_restore -U 你的数据库用户名 -d 你的数据库名 db_dump.dump - 如果是全新数据库,先创建空库再导入:
createdb -U 你的数据库用户名 你的数据库名
三、新手必看注意事项
- 操作前务必备份当前数据库,避免数据丢失。
- 运行Django命令时,要在项目根目录下,且激活了虚拟环境。
- PostgreSQL命令需要确保系统能找到它的执行文件——要么把PostgreSQL的bin目录加入环境变量,要么直接去安装目录的bin文件夹下运行。
- 如果数据有复杂的外键关联,用Django命令导入时一般会自动处理,但如果遇到报错,可以尝试按依赖顺序分批导入(先导入被关联的模型数据)。
内容的提问来源于stack exchange,提问作者Naveen Pandia
相关产品推荐
相关产品推荐

