Попаднах в подобна ситуация, при която SQLAlchemy обект на заявка .all()
не връща всички редове в таблицата (винаги липсва някои), но .count()
обаждането дава правилния брой. След като се зарових още малко, разбрах, че декларацията на модела се отклонява от действителната схема на таблицата в тази база данни. Първо, базата данни има една колона с първичен ключ в схемата, но декларацията на модела има първичен ключ за композиция (в обратен случай като вашия), също така пропуснах уникално ограничение от 3 колони, където схемата на таблицата го има.
Това, което се случи в моя случай, беше, че всеки път, когато SQL Alchemy отправи заявка към базата данни, тя получи всички редове зад сцената, но поради неправилния първичен ключ на състава в моята декларация на модела предотврати зареждането на някои редове в сесията на SQLAlchemy (първичните ключове по дефиниция уникално идентифицират обектите и в резултат на това няма да зареди два обекта с един и същ първичен ключ в сесията, следователно изхвърля тези съставни колони, които имат еднакви стойности дори в базата данни, те имат различни PK.)
В заключение, проверете двойно декларацията на модела със схемата на базата данни, за да се уверите, че са синхронизирани, е първият отговор при този вид проблеми.