MIT の助教授であるすべての教授の名前のリストを取得するために、sqlalchemy クエリを作成しようとしています。特定のコースに関連付けられた複数の助教が存在する可能性があることに注意してください。
私がやろうとしていることは、次のものとほぼ同等です。
uni_mit = University.get_by(name='MIT')
s = select([Professor.name],
and_(Professor.in_(Course.assistants),
Course.university = uni_mit))
session.execute(s)
in_
エンティティ全体ではなく、エンティティのフィールドに対してのみ定義されているため、これは機能しませんProfessor.id.in_
。Course.assistants は教授のリストであり、ID のリストではありません。私も試しcontains
ましたが、うまくいきませんでした。
私のエリクサーモデルは次のとおりです。
class Course(Entity):
id = Field(Integer, primary_key=True)
assistants = ManyToMany('Professor', inverse='courses_assisted', ondelete='cascade')
university = ManyToOne('University')
..
class Professor(Entity):
id = Field(Integer, primary_key=True)
name = Field(String(50), required=True)
courses_assisted = ManyToMany('Course', inverse='assistants', ondelete='cascade')
..
中間の多対多エンティティにアクセスできれば、これは些細なことです (条件は になりますがand_(interm_table.prof_id = Professor.id, interm_table.course = Course.id)
、SQLAlchemy は明らかにこのテーブルを私から隠します。
Elixir 0.7 と SQLAlchemy 0.6 を使用しています。
ところで: この質問はSqlalchemy+elixir: How query with a ManyToMany relationship? とは異なります。つまり、単一の静的なコースではなく、条件を満たすすべてのコースに対して教授をチェックする必要があります。