Я пытаюсь создать запрос sqlalchemy, чтобы получить список имен всех профессоров, которые являются ассистентами профессора в MIT.Обратите внимание, что с одним курсом может быть связано несколько профессоров-ассистентов.
То, что я пытаюсь сделать, примерно эквивалентно:
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 - это список профессоров, а не список их идентификаторов.Я также пытался contains
, но я тоже не работал.
Моя модель Elixir:
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: Как выполнить запрос с отношением ManyToMany? в том, что мне нужно проверить профессоров по всем курсам, которые удовлетворяют условию, а не по одному, статическому.