2010-01-18 11 views
5

Quiero saber si SQLAlchemy tiene problemas para consultar una vista. Si consulto la vista con SQL normal en el servidor como:Consultar una vista en SQLAlchemy

SELECT * FROM ViewMyTable WHERE index1 = '608_56_56'; 

Obtengo un montón de registros. Pero con SQLAlchemy obtengo solo el primero. Pero en el recuento es el número correcto. No tengo ni idea de porqué.

Este es mi código SQLAlchemy.

myQuery = Session.query(ViewMyTable) 
erg = myQuery.filter(ViewMyTable.index1 == index1.strip()) 

# Contains the correct number of all entries I found with that query. 
totalCount = erg.count() 
# Contains only the first entry I found with my query. 
ergListe = erg.all() 

Respuesta

8

si ha trazado ViewMyTable, la consulta sólo devolverá filas que tienen una clave principal totalmente distinto de NULL. Este comportamiento es específico de las versiones 0.5 y anteriores: en 0.6, si alguna de las columnas tiene un valor no NULL en la clave principal, la fila se convierte en una instancia. Especifica el indicador allow_null_pks=True a sus creadores de mapas para asegurar que las claves primarias parciales siguen contando:

mapper(ViewMyTable, myview, allow_null_pks=True) 

Si otoh las filas devueltas tienen todos los valores nulos de la clave primaria, entonces SQLAlchemy no puede crear una entidad ya que no puede colocarlo en el mapa de identidad. En su lugar, puede obtener las columnas individuales al consultarlas específicamente:

for id, index in session.query(ViewMyTable.id, ViewMyTable.index): 
    print id, index 
Cuestiones relacionadas