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

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

На сайте отсутствует реклама! Значете почему?

Помогать людям - моё хобби. А навыки разработчика позволяют не парится нулевой монетизизацией этого сайта. Хотя...

Если вам помогла информация, то даже от доната в 40 рублей мне будет приятно. Докину немного, куплю латте в макдаке, вспомню за чей счет банкет и карма вам зачтется!

Но и просто оставленный комментарий благодарности ниже принесет мне улыбку радости :)

А если захочется написать всякие гадости с переходом на личности, да тоже не стесняйтесь, но обычно я отправляю такое в спам. Люблю, когда дома чисто.

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

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