SQLAlchemy в связке с Flask

Admin Flask, SQLAlchemy

Базовые сведения о работе SQLAlchemy в Flask.

Эта статья из цикла статей о создании сайта на Flask.

Для понимания этой статьи у вас должен быть создан каркас приложения. Если этого нет, прочитайте статью как сделать приложение на Flask.

Примеры запросов SQLAlchemy

Подготовка

В системе должен быть установлен python:
как установить python на Mac OS
как установить python на Ubuntu

Также должна быть создана виртуальная среда для работы команды pip. Если её еще нет:

python3 -m venv venv

Заходим внутрь виртуальной среды python:

source venv/bin/activate

Обновим pip:

pip install --upgrade pip

Установка

pip install Flask-SQLAlchemy
pip install Flask-Migrate
pip install psycopg2-binary

Основной синтаксис в файле __init__.py директории app:

from flask import Flask
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 init
flask db migrate -m "Initial migration."
flask db upgrade

Справка:

flask db --help

Ошибки

1

Если при миграции возникнет ошибка:

ERROR [root] Error: Target database is not up to date.

Проделать следующее:

flask db stamp head
flask db migrate
flask db upgrade

2

FATAL: database «…» does not exist

Забыли создать базу данных или неправильно прописали подключение.

3

ERROR [root] Error: Multiple head revisions are present for given argument ‘head’; please specify a specific target revision, ‘@head’ to narrow to a specific head, or ‘heads’ for all heads

Возникала при обновлении БД с локалки на лайве.

Для решения удаляем папку миграции с локалки и коммитим на сервер, там подтягиваем изменения. Вновь создаем эту директорию все теми же командами, что и раньше. Снова коммитим ее на сервер. Там обновляем БД:

flask db upgrade

Возможно понадобится предварительно заменить версию alembic в БД на ту же что и в локалке (если они не равны).

4

ERROR [root] Error: Can’t locate revision identified by ‘5e14ad967025’

а)

Удаляем таблицу алембик:

DROP TABLE alembic_version;

Затем обновляем БД из файлов миграции:

flask db init
flask db migrate -m "..."
flask db upgrade

б)

Пробуем поменять версию в таблице alembic_version на ту, которая уже есть в БД, которая работает нормально (если разработка ведется на нескольких компьютерах), затем:

flask db init
flask db upgrade

Прочие ошибки можно найти здесь.

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"SQLAlchemy в связке с Flask"