我正在嘗試構建sqlalchemy查詢以獲取所有教授在MIT上助理教授姓名的列表。請注意,可能有多個與某個課程相關的助理教授。SQLAlchemy/Elixir - 查詢在多對多關係列表中查詢實體的成員身份
我想要做的就是大致相當於:
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的顯然是對我隱瞞這個表
我使用的藥劑0.7和0.6的SQLAlchemy
順便說一句:這個問題是在Sqlalchemy+elixir: How query with a ManyToMany relationship?不同,我需要檢查的教授對滿足條件,而不是一個單一的,靜態的所有課程
隱藏輔助表不是sqlalchemy;在vanilla sqlalchemy中,你是* required *來命名和描述該表,但建議不要將它映射到一個類。混淆發生在Elixir。 – SingleNegationElimination 2011-06-11 15:43:18
我在回覆您的評論時更新了我的答案。 – 2011-06-11 21:28:02