DevGang
Авторизоваться

FlaskSQLAlchemy

Расширение для поддержки SQLAlchemy в Flask

Для Flask-SQLAlchemy существуют следующие значения конфигурации. Flask-SQLAlchemy загружает эти значения из вашей основной конфигурации Flask, которые могут быть заполнены различными способами. Обратите внимание, что некоторые из них не могут быть изменены после создания движка, поэтому убедитесь, что настроили как можно раньше и не изменяйте их во время выполнения.

Список ключей конфигурации, в настоящее время принимаемых расширением:

SQLALCHEMY_DATABASE_URI

URI базы данных, который должен использоваться для соединения. Примеры:

  • sqlite:////tmp/test.db
  • mysql://username:password@server/db

SQLALCHEMY_BINDS

Словарь, который сопоставляет ключи привязки с URI-связями SQLAlchemy. Для получения дополнительной информации о связывании см. Несколько баз данных со связыванием.

SQLALCHEMY_ECHO

Если установлено значение True, SQLAlchemy будет регистрировать все операторы, выданные stderr, что может быть полезно для отладки.

SQLALCHEMY_RECORD_QUERIES

Может использоваться для явного отключения или включения записи запроса. Запись запроса автоматически происходит в режиме отладки или тестирования. Смотрите get_debug_queries() для получения дополнительной информации.

SQLALCHEMY_NATIVE_UNICODE

Может использоваться для явного отключения поддержки нативного юникода. Это требуется для некоторых адаптеров баз данных (например, PostgreSQL в некоторых версиях Ubuntu) при использовании с неправильными значениями по умолчанию для баз данных, которые указывают базы данных без кодировки.

SQLALCHEMY_POOL_SIZE

Размер пула базы данных. По умолчанию используется настройка по умолчанию (обычно 5)

SQLALCHEMY_POOL_TIMEOUT

Указывает время ожидания соединения в секундах для пула.

SQLALCHEMY_POOL_RECYCLE

Количество секунд, по истечении которых соединение автоматически перезагружается. Это необходимо для MySQL, который удаляет соединения после 8 часов простоя по умолчанию. Обратите внимание, что Flask-SQLAlchemy автоматически устанавливает это значение на 2 часа, если используется MySQL. Некоторые бэкэнды могут использовать другое значение тайм-аута по умолчанию.

SQLALCHEMY_MAX_OVERFLOW

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

SQLALCHEMY_TRACK_MODIFICATIONS

Если установлено значение True, Flask-SQLAlchemy будет отслеживать изменения объектов и отправлять сигналы. По умолчанию установлено значение False, что позволяет отслеживать, но выдает предупреждение о том, что оно будет отключено по умолчанию в будущем. Это требует дополнительной памяти и должно быть отключено, если не нужно.

URI формат подключения

Полный список URI соединений приведен в документации по SQLAlchemy (Поддерживаемые базы данных). Здесь показаны некоторые общие примеры подключения.

SQLAlchemy указывает источник Engine как URI в сочетании с необязательными аргументами ключевого слова, чтобы указать параметры для Engine. Форма URI:

dialect+driver://username:password@host:port/database

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

Postgres:

postgresql://scott:tiger@localhost/mydatabase

MySQL:

mysql://scott:tiger@localhost/mydatabase

Oracle:

oracle://scott:tiger@127.0.0.1:1521/sidname

SQLite (обратите внимание, что применяются правила пути платформы):

#Unix/Mac (обратите внимание на четыре первых косых черты)
sqlite:////absolute/path/to/foo.db

#Windows (обратите внимание на 3 первых слеша и обратный слэш)
sqlite:///C:\\absolute\\path\\to\\foo.db

#Windows (альтернатива с использованием необработанной строки)
r'sqlite:///C:\absolute\path\to\foo.db'

Использование пользовательских метаданных и соглашений об именах

При желании вы можете создать объект SQLAlchemy с помощью пользовательского объекта MetaData. Это позволяет, среди прочего, указать пользовательское соглашение об именовании ограничений в сочетании с SQLAlchemy 0.9.2 или выше. Это важно для работы с миграциями базы данных (например, с использованием alembic). Вот пример, предложенный в документации SQLAlchemy:

from sqlalchemy import MetaData
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(constraint_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
}

metadata = MetaData(naming_convention=convention)
db = SQLAlchemy(app, metadata=metadata)

Для получения дополнительной информации о метаданных, ознакомьтесь с официальной документацией по нему.

Таймауты

Определенные базы данных могут устанавливать разные тайм-ауты неактивных соединений, что мешает пулу соединений Flask-SQLAlchemy.

По умолчанию MariaDB настроен на тайм-аут 600 секунд. Это часто оказывается недостаточным для отладки.

Если вы используете бэкэнд (или предварительно сконфигурированную базу данных как сервис) с меньшим временем ожидания соединения, рекомендуется установить для SQLALCHEMY_POOL_RECYCLE значение меньше времени ожидания вашего бэкенда.

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться