Narazil jsem na podobnou situaci, kdy SQLAlchemy dotazoval objekt .all()
nevrací všechny řádky v tabulce (vždy nějaké chybí), ale .count()
hovor dává správný počet. Poté, co jsem se v tom trochu více ponořil, jsem si uvědomil, že deklarace modelu se liší od skutečného schématu tabulky v této databázi. Zaprvé, databáze má ve schématu jeden sloupec primárního klíče, ale deklarace modelu má primární klíč složení (v opačném případě, jako je ten váš), také mi chybělo jedinečné omezení se 3 sloupci, kde ho má schéma tabulky.
V mém případě se stalo to, že kdykoli SQL Alchemy dotazoval databázi, dostal všechny řádky za scénou, ale kvůli nesprávnému složení primárního klíče v mé deklaraci modelu zabránil načítání některých řádků do relace SQLAlchemy (primární klíče podle definice jednoznačně identifikují objekty a v důsledku toho nenačte dva objekty se stejným primárním klíčem v relaci, a proto zahodí ty sloupce kompozice, které mají stejné hodnoty, i když v databázi mají různé PK.)
Na závěr, dvojitá kontrola deklarace modelu se schématem databáze, abyste se ujistili, že jsou synchronizované, je první odpovědí na tento druh problémů.