SQLAlchemyクエリオブジェクトの.all()
という同様の状況に遭遇しました。 テーブル内のすべての行を返すわけではありません(常に一部が欠落しています)が、.count()
呼び出しは正しいカウントを与えます。もう少し掘り下げてみると、モデル宣言がそのデータベースの実際のテーブルスキーマから逸脱していることに気付きました。まず、データベースにはスキーマ内に単一の主キー列がありますが、モデル宣言には構成主キーがあります(逆の場合はあなたのように)。また、テーブルスキーマにある3列の一意性制約を見逃しました。
私の場合、SQL Alchemyがデータベースにクエリを実行すると、すべての行がバックグラウンドで取得されましたが、モデル宣言の構成主キーが正しくないため、SQLAlchemyのセッションに一部の行が読み込まれませんでした(定義上、主キーは一意に識別されます)オブジェクトと、結果としてセッションで同じ主キーを持つ2つのオブジェクトをロードしないため、データベース内でも同じ値を持つ構成列を破棄します。PKが異なります。)
結論として、データベーススキーマを使用してモデル宣言を再確認し、それらが同期していることを確認することが、この種の問題からの最初の応答です。