Базовые сведения о работе SQLAlchemy в Flask.
Эта статья из цикла статей о создании сайта на Flask.
Для понимания этой статьи у вас должен быть создан каркас приложения. Если этого нет, прочитайте статью как сделать приложение на Flask.
Подготовка
В системе должен быть установлен python:
— как установить python на Mac OS
— как установить python на Ubuntu
Также должна быть создана виртуальная среда для работы команды pip. Если её еще нет:
Заходим внутрь виртуальной среды python:
Обновим pip:
Установка
pip install Flask-Migrate
pip install psycopg2-binary
Основной синтаксис в файле __init__.py директории app:
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
app.config.from_pyfile('../config-extended.py')
return app
app = create_app()
db = SQLAlchemy(app)
migrate = Migrate(app, db)
Также должен быть создан файл конфигурации, в котором будут указаны данные для соединения с базой данных в различных средах. Об этом подробнее можно узнать в статье конфигурационные файлы Flask.
Миграция
Под миграцией подразумевается синхронизация классов модели с базой данных.
Перед миграцией должна быть создана база данных. Подробнее о создании бд есть в статье установки PostgreSQL.
При первой инициализации и создании таблиц в БД:
flask db migrate -m "Initial migration."
flask db upgrade
Справка:
Ошибки
1
Если при миграции возникнет ошибка:
ERROR [root] Error: Target database is not up to date.
Проделать следующее:
flask db migrate
flask db upgrade
2
FATAL: database «…» does not exist
Забыли создать базу данных или неправильно прописали подключение.
3
Возникала при обновлении БД с локалки на лайве.
Для решения удаляем папку миграции с локалки и коммитим на сервер, там подтягиваем изменения. Вновь создаем эту директорию все теми же командами, что и раньше. Снова коммитим ее на сервер. Там обновляем БД:
Возможно понадобится предварительно заменить версию alembic в БД на ту же что и в локалке (если они не равны).
4
ERROR [root] Error: Can’t locate revision identified by ‘5e14ad967025’
а)
Удаляем таблицу алембик:
Затем обновляем БД из файлов миграции:
flask db migrate -m "..."
flask db upgrade
б)
Пробуем поменять версию в таблице alembic_version на ту, которая уже есть в БД, которая работает нормально (если разработка ведется на нескольких компьютерах), затем:
flask db upgrade
Прочие ошибки можно найти здесь.