infi.clickhouse_orm/docs/schema_migrations.md

65 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

2017-04-26 15:47:02 +03:00
Schema Migrations
=================
Over time, the ORM models in your application may change. Migrations provide a way to modify the database tables according to the changes in your models, without writing raw SQL.
The migrations that were applied to the database are recorded in the `infi_clickhouse_orm_migrations` table, so migrating the database will only apply any missing migrations.
Writing Migrations
------------------
2017-05-11 05:30:17 +03:00
To write migrations, create a Python package. Then create a python file for the initial migration. The migration files must begin with a four-digit number, and will be applied in sequence. For example:
2017-04-26 15:47:02 +03:00
analytics
|
+-- analytics_migrations
|
+-- __init__.py
|
+-- 0001_initial.py
|
+-- 0002_add_user_agents_table.py
2017-05-11 05:30:17 +03:00
Each migration file is expected to contain a list of `operations`, for example:
2017-04-26 15:47:02 +03:00
from infi.clickhouse_orm import migrations
from analytics import models
operations = [
migrations.CreateTable(models.Visits),
migrations.CreateTable(models.Visitors)
]
The following operations are supported:
**CreateTable**
A migration operation that creates a table for a given model class.
**DropTable**
A migration operation that drops the table of a given model class.
**AlterTable**
A migration operation that compares the table of a given model class to the models fields, and alters the table to match the model. The operation can:
- add new columns
- drop obsolete columns
- modify column types
Default values are not altered by this operation.
Running Migrations
------------------
2017-05-11 05:30:17 +03:00
To migrate a database, create a `Database` instance and call its `migrate` method with the package name containing your migrations:
2017-04-26 15:47:02 +03:00
Database('analytics_db').migrate('analytics.analytics_migrations')
2017-04-28 13:44:45 +03:00
Note that you may have more than one migrations package.
---
[<< Table Engines](table_engines.md) | [Table of Contents](toc.md) | [System Models >>](system_models.md)