2

我是 Sqlalchemy 的新手,需要一些帮助。

我有一个模型,具有一对多的关系:

class Metnadev(DeclarativeBase):
    __tablename__ = 'metnadev'

    #personal info
    id = Column(Integer, autoincrement=True, primary_key=True)
    first_name = Column(Unicode(255))
    last_name = Column(Unicode(255))
    birth_day = Column(Date)
    activitys = relationship("Activity", backref="metnadev")

class Activity(DeclarativeBase):
    __tablename__ = 'activity'

    id = Column(Integer, autoincrement=True, primary_key=True)
    metnadev_id = Column(Integer, ForeignKey('metnadev.id'))

    location = Column(Unicode(255))
    visible = Column(Boolean,default=True)

当我做

metnadev = DBSession.query(Metnadev).filter_by(id=kw['id']).one()

我得到了对象,和孩子一起,很棒。我想获取对象,但只从子类中获取行,其中可见 == True

搜索了一下,不知道怎么弄,谢谢帮助

4

2 回答 2

2

有几种方法可以做到这一点。

对于一次性,您可以只运行第二个查询:

from sqlalchemy import and_

activities = Activity.query.filter(and_(Activity.metnadev_id == kw['id'], Activity.visible==True)).all()

您可以更改关系,以便只返回可见项目:

activities = relationship("Activity",
               primaryjoin="and_(Activity.metnadev_id==Metnadev.id, "
               "Activity.visible==True)")

如果您需要更多控制权,您可以加入表格,但听起来关系配置对您有用。如果不是这样,请告诉我。

希望有帮助!

于 2012-12-11T16:49:04.227 回答
2

文档的这一部分有你的答案:http ://docs.sqlalchemy.org/en/rel_0_6/orm/relationships.html#building-query-enabled-properties

class Metnadev(DeclarativeBase):
    #...
    @property
    def activities(self):
        return object_session(self).query(Activity).filter_by(visible=True).with_parent(self).all()
于 2012-12-11T16:50:34.907 回答