2016-11-13 13 views
1

Я пытаюсь использовать флягу, SQLAlchemy и flask_migrate ...Колба Migrate с использованием различных схем Postgres (__table_args__ = { 'схемы': 'test_schema']})

Но каждый раз бежать manage.py мигрируют , alembic всегда определяет мою модель как новую таблицу.

Я думаю, что я поставил table_args в моей модели, чтобы сохранить таблицу в другой Postgres схеме:

class Entry(db.Model): 
    __table_args__ = {'schema': app.config['BASE_SCH']} 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(100)) 
    slug = db.Column(db.String(100), unique=True) 
    body = db.Column(db.Text) 
    status = db.Column(db.SmallInteger, default=STATUS_PUBLIC) 
    created_timestamp = db.Column(db.DateTime, default=datetime.datetime.now) 
    modified_timestamp = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now) 

Если я, чтобы удалить table_args линию моей модели, колба мигрирует работает должным образом. Хранение таблицы в схеме puclic postgres.

Итак, как я могу использовать разные схемы таблиц postgres с флягой?

Спасибо!

+0

Вы проверили сгенерированный сценарий миграции? Я предполагаю, что отсутствует «схема», может быть, если вы добавите ее вручную, все будет работать на вас. – Miguel

+0

Привет @Miguel, спасибо за ваш комментарий ... В сценарии миграции есть определение схемы в конце каждого блока создания таблицы. Я подозреваю, что, возможно, alembic не сможет распознать во время миграции различные схемы таблиц (postgres). –

+0

У меня есть одна и та же проблема - есть модель, которая не входит в схему по умолчанию, начальная миграция выглядит хорошо (имеет указанную схему), и ее запуск создает таблицу в правильной схеме. Но следующий вызов 'flask db migrate' создает новую миграцию, которая является точным дубликатом первого, например, Alembic не видит, что таблица уже существует в БД. –

ответ

0

Наконец-то выяснилось, что в настройке есть опция include_schemas, которая должна быть установлена ​​на True, чтобы заставить Alembic сканировать все схемы перед генерированием миграции.

(немного) подробнее: http://alembic.zzzcomputing.com/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params.include_schemas

Это не совсем понятно, почему Alembic/Колба-Migrate производило миграции для таблиц в непромышленных схемах по умолчанию без этот параметр установлен в первой очереди ... или, скорее, тот факт, что он будет создавать миграции для нестандартных схем, но не обнаруживает эти таблицы в БД, является удивительным поведением.