64 lines
2 KiB
ReStructuredText
64 lines
2 KiB
ReStructuredText
|
|
Migrating the Schema
|
|
====================
|
|
|
|
.. contents:: :local:
|
|
|
|
As development progresses for your custom app, you may need to migrate the
|
|
database schema from time to time.
|
|
|
|
See also this general discussion of the :doc:`concepts/schema`.
|
|
|
|
.. note::
|
|
|
|
The only "safe" migrations are those which add or modify (or remove)
|
|
"custom" tables, i.e. those *not* provided by the ``rattail.db.model``
|
|
package. This doc assumes you are aware of this and are only attempting a
|
|
safe migration.
|
|
|
|
|
|
Modify ORM Classes
|
|
------------------
|
|
|
|
First step is to modify the ORM classes defined by your app, so they reflect
|
|
the "desired" schema. Typically this will mean editing files under the
|
|
``poser.db.model`` package within your source. In particular when adding new
|
|
tables, you must be sure to include them within ``poser/db/model/__init__.py``.
|
|
|
|
As noted above, only those classes *not* provided by ``rattail.db.model``
|
|
should be modified here, to be safe. If you wish to "extend" an existing
|
|
table, you must create a secondary table which ties back to the first via
|
|
one-to-one foreign key relationship.
|
|
|
|
|
|
Create Migration Script
|
|
-----------------------
|
|
|
|
Next you will create the Alembic script which is responsible for performing the
|
|
schema migration against a database. This is typically done like so:
|
|
|
|
.. code-block:: sh
|
|
|
|
workon poser
|
|
cdvirtualenv
|
|
bin/alembic -c app/rattail.conf revision --autogenerate --head poser@head -m "describe migration here"
|
|
|
|
This will create a new file under
|
|
e.g. ``~/src/poser/poser/db/alembic/versions/``. You should edit this file as
|
|
needed to ensure it performs all steps required for the migration. Technically
|
|
it should support downgrade as well as upgrade, although in practice that isn't
|
|
always required.
|
|
|
|
|
|
Upgrade Database Schema
|
|
-----------------------
|
|
|
|
Once you're happy with the new script, you can apply it against your dev
|
|
database with something like:
|
|
|
|
.. code-block:: sh
|
|
|
|
workon poser
|
|
cdvirtualenv
|
|
bin/alembic -c app/rattail.conf upgrade heads
|