Jag stötte på en liknande situation där SQLAlchemy-frågeobjektets .all()
returnerar inte alla rader i tabellen (det saknas alltid några) men .count()
samtalet ger rätt räkning. Efter att ha grävt i det lite mer insåg jag att modelldeklarationen avvek från det faktiska tabellschemat i den databasen. För det första har databasen en enda primärnyckelkolumn i schemat men modelldeklarationen har en kompositionsprimärnyckel (i omvända fall som din), även jag missade en 3-kolumns unik begränsning där som tabellschemat har det.
Det som hände där i mitt fall var att närhelst SQL Alchemy frågade databasen fick den alla rader bakom scenen, men på grund av den felaktiga sammansättningen har primärnyckeln i min modelldeklaration förhindrat att vissa rader laddas in i SQLAlchemys session (primära nycklar per definition identifiera unikt objekten och det kommer inte att ladda två objekt med samma primärnyckel i session som ett resultat, därför slänger den ut de sammansättningskolumner som har samma värden även i databasen de har olika PK:er.)
Sammanfattningsvis, dubbelkolla modelldeklaration med databasschema för att se till att de är synkroniserade är det första svaret från den här typen av problem.