2010-01-18 3 views
5

Ich möchte wissen, wenn SQLAlchemy Probleme beim Abfragen einer Ansicht hat. Wenn ich die Ansicht mit normalem SQL auf dem Server abfrage, wie zum Beispiel:Abfragen einer Ansicht in SQLAlchemy

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

Ich bekomme eine ganze Reihe von Datensätzen. Aber mit SQLAlchemy bekomme ich nur die erste. Aber in der Zählung ist die richtige Nummer. Ich habe keine Idee warum.

Dies ist mein SQLAlchemy-Code.

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

Antwort

8

wenn Sie ViewMyTable zugeordnet haben, wird die Abfrage nur Zeilen zurück, die einen vollständig nicht-NULL Primärschlüssel haben. Dieses Verhalten ist spezifisch für die Versionen 0.5 und niedriger - bei 0.6, wenn eine der Spalten einen Nicht-NULL-Wert im Primärschlüssel hat, wird die Zeile in eine Instanz umgewandelt. Geben Sie die Flagge allow_null_pks=True auf Ihre Mapper, dass teilweise Primärschlüssel noch, um sicherzustellen, zählen:

mapper(ViewMyTable, myview, allow_null_pks=True) 

Wenn OTOH die Zeilen haben alle Nullen für den Primärschlüssel zurückgegeben, dann SQLAlchemy kann ein Unternehmen nicht erstellen, da es nicht einordnen kann es in die Identitätskarte. Sie können stattdessen die einzelnen Spalten aufrufen, indem Sie gezielt nach ihnen suchen:

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