Команда flask db migrate
Команда flask db migrate применяется к проекту
Flask с настроенным расширением Flask-Migrate. Она
сравнивает текущее состояние моделей с последней
применённой миграцией и автоматически генерирует
новый файл миграции. Первым параметром передаётся
сообщение -m с описанием изменений. Команда
не применяет миграцию к базе данных, а только
создаёт её описание.
Синтаксис
flask db migrate [-m MESSAGE] [--rev-id REVISION] [--version-path PATH]
Пример
Давайте создадим простое приложение Flask с моделью и настроим Flask-Migrate:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
Инициализируем миграции в проекте:
flask db init
Теперь создадим первую миграцию на основе модели
User:
flask db migrate -m "create user table"
Результат выполнения команды:
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.autogenerate.compare] Detected added table 'user'
Generating /migrations/versions/a1b2c3d4e5f6_create_user_table.py ... done
Пример
Давайте добавим новое поле email в модель
User и создадим миграцию для этого изменения:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
email = db.Column(db.String(100))
Теперь сгенерируем миграцию для нового поля:
flask db migrate -m "add email to user"
Результат выполнения команды:
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.autogenerate.compare] Detected added column 'user.email'
Generating /migrations/versions/b2c3d4e5f6a7_add_email_to_user.py ... done
Смотрите также
-
команду
flask db init,
которая инициализирует миграции в проекте -
команду
flask db upgrade,
которая применяет миграции к базе данных -
команду
flask db downgrade,
которая откатывает миграции -
команду
flask db revision,
которая создаёт пустую миграцию вручную