Data migration¶
Ptah migration based on alembic package. Ptah adds per package migration. Migration is not required alembic environment.
Create package migration¶
You can use alembic operations for ddl manipulation. Here are the steps for ptah migrations generation.
- Create directory in your package that will contain migration steps.
For example:
1 2 $ cd ptah_minicms $ mkdir migrationsSo directory listing should look like this:
1 2 3 4 5 6 $ ls -l drwxrwxr-x 2 fafhrd fafhrd 4096 2012-01-11 15:58 migrations drwxrwxr-x 2 fafhrd fafhrd 4096 2011-12-16 11:33 static drwxrwxr-x 2 fafhrd fafhrd 4096 2011-12-29 14:50 templates -rw-rw-r-- 1 fafhrd fafhrd 1457 2011-12-29 14:50 actions.py ...
- Register package migrations with
ptah.register_migration()api.
1 2 3 4 5 import ptah ptah.register_migration( 'ptah_minicms', 'ptah_minicms:migrations', 'Ptah minicms example migration')First parameter is package name, second parameter is asset style path and third parameter migration title.
- To create new revision you should use
ptah-migratescript.
1 2 $ /bin/ptah-migrate settings.ini revision ptah_minicms -r 001 -m "Add column" Generating /path-to-virtualenv/ptah_minicms/migrations/001.py...doneGenerated script contains empty
update()anddowngrade()function. Add code that does migration from previous revision to this function.
- Now you can use
ptah-migratescript to execute migration steps.
1 2 $ bin/ptah-migrate settings.ini upgrade ptah_minicms 2012-01-11 16:14:42,657 INFO [ptah.alembic] ptah_minicms: running upgrade None -> 001
Check Data migration chapter for ptah-migrate script detailed description.
Migration data during start up¶
Use ptah_migrate() pyramid directive for migration data schema during startup.
import ptah
from pyramid.config import Configurator
def main(global_settings, **settings):
config = Configurator(settings=settings)
config.include('ptah')
...
config.ptah_migrate()
...
return config.make_wsgi_app()
Migration steps are executed after configration commited.
Notes¶
- Ptah stores package revision numbers in
ptah_db_versionstable. During data population process ptah checks ifptah_db_versionstable contains version info, if it doesnt contain version informationptahjust set latest revision without running migration steps. It assumes if there is no version information then database schema is latest. ptah-migratescript executesPOPULATE_DB_SCHEMApopulate step before running any upgrade steps.