Kelas ORM Anda terlihat baik-baik saja. Ini adalah kueri yang salah.
Singkatnya, Anda mendapatkan kesalahan "InstrumentedAttribute" karena Anda menyalahgunakan session.query
metode.
Dari dokumen
session.query
metode mengambil sebagai argumen, "SomeMappedClass" atau "entitas". Anda memiliki 2 kelas yang dipetakan, Tournament
, dan TournamentMaster
. "Entitas" ini biasanya berupa kelas yang dipetakan (objek ORM) atau Kolom dari kelas yang dipetakan ini.
Namun Anda melewati Tournament.tournament_master.id_
yang bukan "MappedClass" atau kolom dan dengan demikian bukan "entitas" yang session.query
dapat dikonsumsi.
Cara lain untuk melihatnya adalah dengan memanggil Tournament.tournament_master.id_
Anda mencoba mengakses catatan 'TournamentMaster' (atau instance) dari kelas 'Tournament', yang tidak masuk akal.
Tidak terlalu jelas bagi saya apa sebenarnya yang Anda harapkan untuk dikembalikan dari kueri. Bagaimanapun, ini adalah permulaan.
Alih-alih
qry = session.query(Tournament.tournament_master.id_).limit(100)
coba
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Ini mungkin juga berfungsi (belum diuji) untuk hanya mengembalikan bidang id_, jika itu yang Anda inginkan
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)