2

私は Sqlalchemy が初めてで、助けが必要です。

私は1対多の関係を持つモデルを持っています:

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()

私は子供と一緒に、素晴らしいオブジェクトを手に入れました。オブジェクトを取得したいのですが、visible == Trueである子クラスからのみ行を取得します

調べたのですがやり方がわかりません よろしくお願いします

4

2 に答える 2

2

これを行うにはいくつかの方法があります。

1 回限りの場合は、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 に答える