我有一个有用的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'
知道我在视图映射中缺少什么?
答案 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()
的子类形成对比,后者将列公开为根级对象属性。