What is the best way to migrate data in django

亡梦爱人 提交于 2019-12-31 08:08:50

问题


After making some changes in my models (eg. new field in a model and a new model) what is the best way of reflecting these changes to my populated database?


PS: I wanted to see many solutions in one place rated. Apparently more solutions are already listed here.


回答1:


I've asked a similar question here and got quite a few answers.

There are quite a lot of ways of doing it, like manually doing the dumping and reloading with SQL, using fixtures or using one of the "emerging" schema-evolution packages for Django:

  • Django Evolution
  • South
  • dmigrations (there's a DjangoCon video of a panel on schema-evolution in Django where these 3 solutions are discussed)



回答2:


Another technique is to use the dumpdata and loaddata arguments to manage.py, killing your database in-between:

  1. python manage.py dumpdata > dump.json
  2. With an external tool, drop any affected tables, or kill the whole db
  3. python manage.py loaddata dump.json

See manage.py docs for more.




回答3:


Depends on the scope of the changes. If it's beyond an ALTER, you're doing major surgery. Make backups of model as well as database so you can go back.

My preference is to put your new (revised, corrected, expanded) model in as a NEW application. It won't have URL's or anything, just a model.

  1. Creating the new model as a new application. Create tests, just to be sure it works.
  2. syncdb to build this interim implementation of the new model.
  3. Write a little one-time utility to query your old model, and load your new model. You might want to try this in pure SQL. I prefer to write a simple query, build and save loop.
  4. After the new model is loaded, you can dump this to a JSON file.

Once you've pulled the data out of your old model, you can rebuild your DB in the preferred new format.

  1. Move the new model into your existing application.
  2. Drop the old versions of the application's tables.
  3. syncdb to build the new tables.
  4. Load the JSON file with the data.



回答4:


Django now has its own built-in migrations, documented at:

https://docs.djangoproject.com/en/dev/topics/migrations/




回答5:


Look with manage.py sqlall what the parameters are for the new columns and manually add them in your database with Alter table statements. This way you don't have to redo your database; It requires some SQL knowledge though...

Take a look here (Scroll down to "Making Changes to a Database Schema")




回答6:


Perform these steps in order may help you:

For more details,

clickhere: http://south.readthedocs.org/en/latest/

1) python manage.py schemamigration apps.appname --initial

Above step creates migration folder as default.

2) python manage.py migrate apps.appname --fake

generates a fake migration.

3) python manage.py schemamigration apps.appname --auto

Then you can add fields as you wish and perform the above command.

4) python manage.py migrate apps.appname

Then migrate the files to the database.



来源:https://stackoverflow.com/questions/175993/what-is-the-best-way-to-migrate-data-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!