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'for boardSet,在这种情况下,您将受益于

dynamic- 该属性将为所有读取操作返回一个预先配置的查询对象,在迭代结果之前可以对其应用进一步的过滤操作。

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 回答