Ik kwam een vergelijkbare situatie tegen waarin het .all()
. van het SQLAlchemy-queryobject retourneert niet alle rijen in de tabel (er ontbreken altijd enkele) maar .count()
oproep geeft wel de juiste telling. Nadat ik me er wat meer in had verdiept, realiseerde ik me dat de modeldeclaratie afweek van het werkelijke tabelschema in die database. Ten eerste heeft de database een enkele primaire sleutelkolom in het schema, maar de modeldeclaratie heeft een primaire sleutel voor compositie (in omgekeerd geval zoals de uwe), ook miste ik een unieke beperking van 3 kolommen waar zoals het tabelschema het heeft.
Wat daar in mijn geval gebeurde, was dat wanneer SQL Alchemy de database doorzocht, het alle rijen achter de schermen kreeg, maar vanwege de onjuiste samenstelling van de primaire sleutel in mijn modeldeclaratie heeft verhinderd dat sommige rijen in de sessie van SQLAlchemy worden geladen (primaire sleutels zijn per definitie uniek te identificeren de objecten en het laadt daardoor niet twee objecten met dezelfde primaire sleutel in de sessie, daarom gooit het die compositiekolommen weg die dezelfde waarden hebben, zelfs in de database hebben ze verschillende PK's.)
Tot slot, dubbelcheck modeldeclaratie met databaseschema om er zeker van te zijn dat ze synchroon lopen, is de eerste reactie op dit soort problemen.