मैं एक ऐसी ही स्थिति में भाग गया जहां SQLAlchemy क्वेरी ऑब्जेक्ट का .all()
. है तालिका में सभी पंक्तियों को वापस नहीं करता है (हमेशा कुछ गायब) लेकिन .count()
कॉल सही गिनती देता है। इसमें थोड़ा और खोदने के बाद, मुझे एहसास हुआ कि मॉडल घोषणा उस डेटाबेस में वास्तविक तालिका स्कीमा से विचलित हो गई है। सबसे पहले, डेटाबेस में स्कीमा में एक प्राथमिक कुंजी कॉलम होता है लेकिन मॉडल घोषणा में एक संरचना प्राथमिक कुंजी होती है (आपके जैसे विपरीत मामले में), मुझे 3-कॉलम अद्वितीय बाधा भी याद आती है जहां तालिका स्कीमा में है।
मेरे मामले में वहां क्या हुआ था कि जब भी SQL कीमिया डेटाबेस से पूछताछ करती है तो उसे दृश्य के पीछे सभी पंक्तियां मिलती हैं लेकिन मेरे मॉडल घोषणा में गलत संरचना प्राथमिक कुंजी के कारण SQLAlchemy के सत्र में लोड होने वाली कुछ पंक्तियों को रोका गया है (परिभाषा के अनुसार प्राथमिक कुंजी विशिष्ट रूप से पहचानती है ऑब्जेक्ट्स और यह परिणाम के रूप में सत्र में एक ही प्राथमिक कुंजी के साथ दो ऑब्जेक्ट्स लोड नहीं करेगा, इसलिए यह उन कंपोजिशन कॉलम को टॉस करता है जिनके डेटाबेस में समान मान होते हैं, उनके पास अलग-अलग पीके होते हैं।)
अंत में, यह सुनिश्चित करने के लिए कि वे सिंक में हैं, डेटाबेस स्कीमा के साथ मॉडल घोषणा को दोबारा जांचें, इस तरह के मुद्दों से पहली प्रतिक्रिया है।