Wpadłem w podobną sytuację, w której obiekt zapytania SQLAlchemy .all()
nie zwraca wszystkich wierszy w tabeli (zawsze brakuje niektórych), ale .count()
wywołanie daje poprawną liczbę. Po dokładniejszym zagłębieniu się w to zdałem sobie sprawę, że deklaracja modelu odbiega od rzeczywistego schematu tabeli w tej bazie danych. Po pierwsze, baza danych ma pojedynczą kolumnę klucza podstawowego w schemacie, ale deklaracja modelu ma klucz podstawowy kompozycji (w odwrotnym przypadku, tak jak w twoim), również przegapiłem ograniczenie unikatowości trzech kolumn, które ma w schemacie tabeli.
W moim przypadku za każdym razem, gdy SQL Alchemy wysyła zapytanie do bazy danych, wszystkie wiersze sąza kulisami ale z powodu nieprawidłowej kompozycji klucz podstawowy w mojej deklaracji modelu uniemożliwiłwczytanie niektórych wierszy do sesji SQLAlchemy (klucze podstawowe z definicji jednoznacznie identyfikują obiekty i w rezultacie nie załaduje dwóch obiektów z tym samym kluczem podstawowym w sesji, dlatego odrzuca te kolumny kompozycji, które mają te same wartości, nawet w bazie danych, w której mają różne PK.)
Podsumowując, dwukrotnie sprawdź deklarację modelu ze schematem bazy danych, aby upewnić się, że są zsynchronizowane, jest pierwszą odpowiedzią na tego rodzaju problemy.