Fre*_*ind 1 many-to-many sqlalchemy conditional-statements
我用sqlalchemy 0.6.4.
我有2个课程:问题和标签,它们是多对多的.
class Question(Base):
__tablename__ = "questions"
id = Column(Integer, primary_key=True)
deleted = Column(Boolean)
...
tags = relationship('Tag', secondary=r_questions_tags)
class Tag(Base):
__tablename__ = "tags"
id = Column(BigInteger, primary_key=True)
questions = relationship('Question', secondary=r_questions_tags)
Run Code Online (Sandbox Code Playgroud)
因此,tag.questions将所有问题都归属于标签.
但是现在,既然Question有一个deleted专栏,我希望这样做:
class Tag(Base):
...
# get non-deleted questions
questions = relationship('Question', secondary=r_questions_tags,
condition='Question.deleted==False')
# get deleted questions
deleted_questions = relationship('Question', secondary=r_questions_tags,
condition='Question.deleted==True')
Run Code Online (Sandbox Code Playgroud)
但不幸的是,没有这样的condition参数.我现在能做什么?
您可以通过secondaryjoin参数to 替换SQLAlchemy的默认条件,在连接上强加额外条件relationship.由于您要替换默认值(而不仅仅是添加默认值),因此您需要手动重新指定原始条件以及新条件:
from sqlalchemy import sql
# ...
class Tag(Base):
__tablename__ = "tags"
id = Column(BigInteger, primary_key=True)
questions = relationship('Question',
secondary=r_questions_tags,
secondaryjoin=sql.and_(
r_questions_tags.c.question_id == Question.id,
Question.deleted == False))
deleted_questions = relationship('Question',
secondary=r_questions_tags,
secondaryjoin=sql.and_(
r_questions_tags.c.question_id == Question.id,
Question.deleted == True))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |