我为“单词”和“短语”之间的多对多关联设置了当前表格:
association_table_wp = Table('words_phras', Base.metadata,
autoload=True,
extend_existing=True)
class Phrase(Base):
__tablename__ = 'phrases'
__table_args__ = {'autoload': True}
def __init__(self, phrase, explanation=None, active=False):
self.phrase = phrase
self.explanation = explanation
self.active = active
class Word(Base):
__tablename__ = 'words'
__table_args__ = {'autoload': True}
def __init__(self, word, word_id=None, active=False):
self.word = word
self.word_id = word_id
self.active = active
Word.phrases = relationship(Phrase,
secondary=association_table_wp,
backref="words")
现在通常当我想查找一些单词及其短语时,我会使用:
words = db_session.query(Word).filter(Word.id.in_(word_ids)).\
options(joinedload(Word.phrases)).\
all()
这使我可以访问words[i].phrases
与给定单词关联的短语。
现在,这可以正常工作,但请注意“活动”属性。我想过滤单词的短语,以便只active == True
返回带有的短语。如何才能做到这一点?我已经尝试了几种 joins 和 eager_loading 的组合,但它们都没有像我希望的那样工作。
非常感谢你。