0

SQLAlchemy のドキュメントを読んでいましたが、これについて頭を悩ませています。次の設定を検討してください。

boardset_user_association_table = db.Table('boardset_user_association', 
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('boardset_id', db.Integer, db.ForeignKey('boardset.id'))
)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True)
    password = db.Column(db.String(30))
    boardSet = db.relationship('BoardSet', secondary=boardset_user_association_table, backref='user')

    def __repr__(self):
        return "<User('%s','%s')>" % (self.username, self.id)

class BoardSet(db.Model):
    __tablename__ = 'boardset'
    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.DateTime)
    boards = db.relationship('Board', backref='boardset', lazy='dynamic')

    def __repr__(self):
        return "<BoardSet('%s','%s')>" % (self.id, self.created)

User オブジェクトからアイテムのコレクションを取得しましたが、実際のデータに対してフィルタリングなどを実行できませんでした。たとえば、場合によっては、フィールド Created の値で User.boardSet からの結果を並べ替えたいと思います

4

1 に答える 1

1

lazy='dynamic'にも使用できますboardSet。その場合、次の利点が得られます。

dynamic- この属性は、すべての読み取り操作に対して事前構成された Query オブジェクトを返します。このオブジェクトに対して、結果を反復する前にさらにフィルタリング操作を適用できます。

class User(...):
    ...
    boardSet = db.relationship('BoardSet', secondary=boardset_user_association_table, backref='user', lazy='dynamic')

myuser = session.query(User).get(1)
boardsets = myuser.boardSet.order_by(BoardSet.created)

もちろん、購入するだけでロードした後もメモリ内のアイテムを簡単に注文できます。sorted(myuser.boardSet, key=lambda bs: bs.created)

于 2012-07-18T14:20:44.063 に答える