Django packages that help migrate the database when there are schema updates
- Mar 20, 2022
Django-admin command to display migrations with dependencies.
Test django schema and data migrations, including migrations' order and best practices.
Features
- Allows to test
django
schema and data migrations - Allows to test both forward and rollback migrations
- Allows to test the migrations order
- Allows to test migration names
- Allows to test database configuration
- Fully typed with annotations and checked with
mypy
, PEP561 compatible - Easy to start: has lots of docs, tests, and tutorials
So, here's an example:
from django_test_migrations.migrator import Migrator migrator = Migrator(database='default') # Initial migration, currently our model has only a single string field: # Note: # We are testing migration `0002_someitem_is_clean`, so we are specifying # the name of the previous migration (`0001_initial`) in the # .apply_initial_migration() method in order to prepare a state of the database # before applying the migration we are going to test. # old_state = migrator.apply_initial_migration(('main_app', '0001_initial')) SomeItem = old_state.apps.get_model('main_app', 'SomeItem') # Let's create a model with just a single field specified: SomeItem.objects.create(string_field='a') assert len(SomeItem._meta.get_fields()) == 2 # id + string_field # Now this migration will add `is_clean` field to the model: new_state = migrator.apply_tested_migration( ('main_app', '0002_someitem_is_clean'), ) SomeItem = new_state.apps.get_model('main_app', 'SomeItem') # We can now test how our migration worked, new field is there: assert SomeItem.objects.filter(is_clean=True).count() == 0 assert len(SomeItem._meta.get_fields()) == 3 # id + string_field + is_clean # Cleanup: migrator.reset()django django-migrations django-orm django-test django-testing pytest pytest-plugin python python3
Liquidb is a Django app that simplifies migration management.
$ git clone [email protected]:Gusakovskiy/django-liquidb.git $ cd django-liquidb $ python setup.py install