Django dumpdata and loaddata
dumpdata command
- It is a django management command, which can be use to backup(export) you model instances or whole database
dumpdata for basic database dump
- Following command will dump whole database in to a
db.json
file
./manage.py dumpdata > db.json
dumpdata for backup specific app
- Following command will dump the content in django
admin
app intoadmin.json
file
./manage.py dumpdata admin > admin.json
dumpdata for backup specific table
- Following command will dump only the content in django
admin.logentry
table
./manage.py dumpdata admin.logentry > logentry.json
- Following command will dump the content in django
auth.user
table
./manage.py dumpdata auth.user > user.json
dumpdata (--exclude)
You can use
--exclude
option to specify apps/tables which don't need being dumpedFollowing command will dump the whole database with out including
auth.permission
table content
./manage.py dumpdata --exclude auth.permission > db.json
dumpdata (--indent)
By default,
dumpdata
will output all data on a single line. It isn’t easy for humans to readYou can use the
--indent
option to pretty-print the output with a number of indentation spaces
./manage.py dumpdata auth.user --indent 2 > user.json
- Example output of above command is below
dumpdata (--format)
By default, dumpdata will format its output in JSON
You can specify the format using --format option
Command supports for following formats(serialization formats)
- json
- xml
- yaml
./manage.py dumpdata auth.user --indent 2 --format xml > user.xml
- Above command output an xml file(user.xml)
loaddata command
- This command can be use to load the fixtures(database dumps) into database
./manage.py loaddata user.json
- This command will add the
user.json
file content into the database
Restore fresh database
When you backup whole database by using
dumpdata
command, it will backup all the database tablesIf you use this database dump to load the fresh database(in another django project), it can be causes
IntegrityError
(If youloaddata
in same database it works fine)To fix this problem, make sure to backup the database by excluding
contenttypes
andauth.permissions
tables
./manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json
- Now you can use
loaddata
command with a fresh database
./manage.py loaddata db.json
Written by eranga bandara
Related protips
7 Responses
Thanks for this tutorial. The steps worked for me, but I found that when I tried to restore, I got an out of memory error, because my file was too large. I ended up using raw postgres commands:
export: pg_dump <dbname> -t <tablename> -f out.sql
import: psql <dbname> -f out.sql
There is lots of other cases where loaddata and dumpdata commands don't work. So pg_dump and psql are good, but the downside of them is that you lose the database configuration that is stored in the project settings (or the environment if you are 12factor aware).
Thank you very much! Paragraph "Restore fresh database" saved me!
Hi, thanks for this post. I was able to use it to save some dats into json but when I tried to load same data into the db, I got the error:
raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), pk)
local variable 'pk' referenced before assignment
How do I go around this error? Thanks
Thanks! This is awesome. For some reason I actually got my Webfaction Django to accept fixtures. Def bookmark on this exact page!
Good article. Here is a blog explaining loading fixtures in django with a video tutorial:- http://newprograminglogics.blogspot.com/2018/09/load-initial-data-into-django-model.html
Thanks so much, this save me from slot of trouble.