查询由SQLAcodegen创建的PostgreSQL视图

时间:2016-02-23 11:45:26

标签: postgresql sqlalchemy sql-view sqlacodegen

我有一个有用的PostgreSQL视图,由JOIN查询生成:

\d very_useful_view;
 View "public.very_useful_view"
   Column    |    Type     | Modifiers
-------------+-------------+-----------
 tree_id     | dom_treeid  |
 title       | text        |
 grass_id    | dom_grass   |
 name        | text        |
 street_uuid | uuid        |

视图由SQLAcodegen建模为以下对象:

t_very_useful_view = Table(
    'very_useful_view', metadata,
    Column('tree_id', String),
    Column('title', Text),
    Column('grass_id', Text),
    Column('name', Text),
    Column('street_uuid', UUID)
)

普通查询按预期工作:

print session.query(t_very_useful_view).all()

然而,过滤 -

print session.query(t_very_useful_view).\
    filter(t_very_useful_view.tree_id == some_tree_id).\
    all()

引发:

AttributeError: 'Table' object has no attribute 'tree_id'

知道我在视图映射中缺少什么?

1 个答案:

答案 0 :(得分:1)

Table对象should be accessed with the columns property的列:

print session.query(t_very_useful_view).\
    filter(t_very_useful_view.columns.tree_id == some_tree_id).\
    all()

这与declarative_base()的子类形成对比,后者将列公开为根级对象属性。