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

FlaskSQLAlchemy

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

Начиная с 0.12 Flask-SQLAlchemy может легко подключаться к нескольким базам данных. Чтобы добиться этого, он предварительно настраивает SQLAlchemy для поддержки нескольких «привязки».

Что такое привязки? В SQLAlchemy говорят, что связывание - это то, что может выполнять операторы SQL, и обычно это соединение или механизм. В Flask-SQLAlchemy привязки всегда являются механизмами, которые создаются для вас автоматически за кулисами. Каждый из этих привязок затем ассоциируется с коротким ключом (ключом привязки). Этот ключ затем используется во время объявления модели, чтобы связать модель с конкретным механизмом.

Если для модели не указан ключ привязки, вместо него используется соединение по умолчанию (как настроено в SQLALCHEMY_DATABASE_URI).

Пример конфигурации

Следующая конфигурация объявляет три соединения с базой данных. Специальное значение по умолчанию, а также два других имени пользователя (для users) и appmeta (которое подключается к базе данных sqlite для доступа только для чтения к некоторым данным, которые приложение предоставляет внутри):

SQLALCHEMY_DATABASE_URI = 'postgres://localhost/main'
SQLALCHEMY_BINDS = {
    'users':        'mysqldb://localhost/users',
    'appmeta':      'sqlite:////path/to/appmeta.db'
}

Создание и удаление таблиц

Методы create_all() и drop_all() по умолчанию работают со всеми объявленными связями, включая заданные по умолчанию. Это поведение можно настроить, указав параметр связывания. Требуется либо одно имя привязки, __all__ для ссылки на все привязки, либо список привязок. Связывание по умолчанию (SQLALCHEMY_DATABASE_URI) называется None:

db.create_all()
db.create_all(bind=['users'])
db.create_all(bind='appmeta')
db.drop_all(bind=None)

Ссылаясь на Binds

Если вы объявляете модель, вы можете указать привязку для использования с атрибутом __bind_key__:

class User(db.Model):
    __bind_key__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)

Внутри ключ привязки хранится в информационном словаре таблицы как bind_key. Это важно знать, потому что, когда вы хотите создать объект таблицы напрямую, вам нужно будет поместить его туда:

user_favorites = db.Table('user_favorites',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('message_id', db.Integer, db.ForeignKey('message.id')),
    info={'bind_key': 'users'}
)

Если вы указали __bind_key__ на своих моделях, вы можете использовать их точно так как обычно. Модель подключается к указанному соединению с базой данных.

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