2016-02-23 4 views
1

J'ai vue PostgreSQL utile, généré par une requête JOIN:Interroger une vue PostgreSQL créée par SQLAcodegen

\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  | 

La vue a été modélisé par SQLAcodegen à l'objet suivant:

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) 
) 

requête normale fonctionne comme prévu:

print session.query(t_very_useful_view).all() 

Cependant, le filtrage -

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

Soulève:

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

Toute idée de ce que je suis absent de la cartographie vue?

Répondre

1

Les colonnes d'un objet Tableshould 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() 

Cela contraste avec les sous-classes de declarative_base(), qui exposent les colonnes comme propriétés d'objet au niveau de la racine.