आपकी ओआरएम कक्षाएं ठीक दिखती हैं। यह वह प्रश्न है जो गलत है।
संक्षेप में आपको वह "इंस्ट्रूमेंटेड एट्रिब्यूट" त्रुटि मिल रही है क्योंकि आप session.query
का दुरुपयोग कर रहे हैं विधि।
दस्तावेज़ों से
session.query
विधि तर्क के रूप में लेती है, "SomeMappedClass" या "इकाइयाँ"। आपके पास 2 मैप किए गए वर्ग परिभाषित हैं, Tournament
, और TournamentMaster
. ये "इकाइयाँ" आमतौर पर या तो आपकी मैप की गई कक्षाएं (ORM ऑब्जेक्ट) या इन मैप की गई कक्षाओं का एक कॉलम होती हैं।
हालांकि आप Tournament.tournament_master.id_
. में पास हो रहे हैं जो एक "मैप्डक्लास" या एक कॉलम नहीं है और इस प्रकार एक "इकाई" नहीं है जो session.query
है उपभोग कर सकते हैं।
इसे देखने का दूसरा तरीका यह है कि Tournament.tournament_master.id_
पर कॉल करके आप 'टूर्नामेंट' वर्ग से 'टूर्नामेंटमास्टर' रिकॉर्ड (या उदाहरण) तक पहुंचने का प्रयास कर रहे हैं, जिसका कोई मतलब नहीं है।
यह मेरे लिए बिल्कुल स्पष्ट नहीं है कि आप वास्तव में क्वेरी से वापस आने की क्या उम्मीद कर रहे हैं। किसी भी मामले में हालांकि यहाँ एक शुरुआत है।
इसके बजाय
qry = session.query(Tournament.tournament_master.id_).limit(100)
कोशिश करें
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
यह केवल id_ फ़ील्ड को वापस करने के लिए भी काम कर सकता है (परीक्षण नहीं किया गया है), यदि आपका इरादा ऐसा है
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)