Các lớp ORM của bạn trông ổn. Đó là truy vấn không chính xác.
Tóm lại, bạn đang gặp lỗi "InstrumentedAttribute" vì bạn đang sử dụng sai session.query
phương pháp.
Từ tài liệu
session.query
phương thức nhận dưới dạng đối số, "SomeMappedClass" hoặc "thực thể". Bạn đã xác định 2 lớp được ánh xạ, Tournament
và TournamentMaster
. Những "thực thể" này thường là các lớp được ánh xạ của bạn (đối tượng ORM) hoặc một Cột của các lớp được ánh xạ này.
Tuy nhiên, bạn đang vượt qua trong Tournament.tournament_master.id_
không phải là "MappedClass" hoặc một cột và do đó không phải là "thực thể" session.query
có thể tiêu thụ.
Một cách khác để xem xét nó là bằng cách gọi Tournament.tournament_master.id_
bạn đang cố gắng truy cập bản ghi (hoặc bản sao) 'TournamentMaster' từ lớp 'Tournament', điều này không hợp lý.
Tôi không quá rõ ràng chính xác bạn hy vọng sẽ trả lại điều gì từ truy vấn. Trong mọi trường hợp, đây là bước khởi đầu.
Thay vì
qry = session.query(Tournament.tournament_master.id_).limit(100)
thử
qry = session.query(Tournament, TournamentMaster).join(TournamentMaster).limit(100)
Điều này cũng có thể hoạt động (chưa được kiểm tra) để chỉ trả về trường id_, nếu đó là ý định của bạn
qry = session.query(Tournament, TournamentMaster).join(Tournament).with_entities(TournamentMaster.id_).limit(100)