sql >> データベース >  >> RDS >> Mysql

リレーションシップを使用してクエリを生成できないのはなぜですか?

    あなたのORMクラスはうまく見えます。間違っているのはクエリです。

    つまり、session.queryを誤用しているため、「InstrumentedAttribute」エラーが発生します。 メソッド。

    ドキュメントから session.query メソッドは引数として「SomeMappedClass」または「entities」を取ります。 Tournamentという2つのマップされたクラスが定義されています 、およびTournamentMaster 。これらの「エンティティ」は通常、マップされたクラス(ORMオブジェクト)またはこれらのマップされたクラスの列のいずれかです。

    ただし、Tournament.tournament_master.id_を渡しています。 これは「MappedClass」または列ではないため、session.queryの「エンティティ」ではありません。 消費することができます。

    別の見方をすると、Tournament.tournament_master.id_を呼び出すことです。 「Tournament」クラスから「TournamentMaster」レコード(またはインスタンス)にアクセスしようとしていますが、これは意味がありません。

    クエリから何を返したいのか、私にはわかりません。いずれにせよ、ここからが始まりです。

    代わりに

    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)
    



    1. MySQL-SELECT WHEREフィールドIN(サブクエリ)-非常に遅い理由

    2. 供給と需要の課題のマッチング

    3. JDBCCreateTableの使用例ステートメント

    4. error_logではなくすべてのPHPエラーをデータベースに出力する