2017-02-01 13 views
0

Я использую Flask-SQLAlchemy для определения своих моделей, а затем с помощью Flask-Migrate для автоматического создания сценариев миграции для развертывания в базе данных PostgreSQL. Я определил ряд SQL-представлений в базе данных, которые я использую в своем приложении, как показано ниже.Получение Flask-Migrate для игнорирования SQL-представлений, которые отображаются как модели Flask-SQLAlchemy

Однако Flask-Migrate теперь создает файл миграции для представления, поскольку он считает его таблицей. Как правильно получить Flask-Migrate/Alembic, чтобы игнорировать представление во время автогенерации?

SQL Просмотр названий: vw_SampleView с двумя колонками: id и rowcount.

class ViewSampleView(db.Model): 
    __tablename__ = 'vw_report_high_level_count' 

    info = dict(is_view=True) 

    id = db.Column(db.String(), primary_key=True) 
    rowcount = db.Column(db.Integer(), nullable=False) 

Это означает, что теперь я могу делать запросы, как так:

ViewSampleView.query.all() 

Я попытался следующие инструкции по http://alembic.zzzcomputing.com/en/latest/cookbook.html и добавил info = dict(is_view=True) часть моей модели и следующие биты в моем env.py файл, но дон» не знаю, куда идти отсюда.

def include_object(object, name, type_, reflected, compare_to): 
    """ 
    Exclude views from Alembic's consideration. 
    """ 

    return not object.info.get('is_view', False) 

... 

context.configure(url=url,include_object = include_object) 

ответ

1

Я думаю (хотя не проверял), что вы можете пометить вашу таблицу как представление с атрибутом __table_args__:

class ViewSampleView(db.Model): 
    __tablename__ = 'vw_report_high_level_count' 
    __table_args__ = {'info': dict(is_view=True)} 

id = db.Column(db.String(), primary_key=True) 
rowcount = db.Column(db.Integer(), nullable=False) 
+0

Работал как шарм! Обратите внимание также на себя и других читателей, что context.configure устанавливается в двух местах в env.py: run_migrations_offline() и run_migrations_online() –

 Смежные вопросы

  • Нет связанных вопросов^_^