Flask-SQLAlchemy查询有多对多的ITSELF关系

时间:2014-05-05 09:29:01

标签: python flask flask-sqlalchemy

我与自己有多对多的关系,这意味着,我的模型是用户,一个字段是朋友,这将是用户。我已经完成了关系,但是当我尝试为用户的朋友进行查询时,我的问题就来了。我的模型和关系看起来像这样:

friendship = db.Table('friends',
Column('friend_id', db.Integer, db.ForeignKey('monkeys.id')),
Column('myfriend_id', db.Integer, db.ForeignKey('monkeys.id'))
)

class Monkey (db.Model):
    _tablename__ = "monkeys"

    id = Column(Integer, primary_key=True)
    username = Column(String(50), unique = True)
    email = Column(String(120), unique = True)
    password = Column(String(50))
    date = Column (DateTime(), default=datetime.now())

    friends = relationship('Monkey',
            secondary = friendship,
            primaryjoin = (friendship.c.friend_id == id),
            secondaryjoin = (friendship.c.myfriend_id == id),
            backref = backref('friendship', lazy = 'dynamic'),
            lazy = 'dynamic')

从de视图来看,如果我想进行查询,我已经尝试了一些东西

friends_list = Monkey.query.join(Monkey.friends).filter(Monkey.id == user.id).all()

这不起作用......请帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您不需要自己创建连接。

更改lazy ='加入' - 项目将在与父母相同的查询中“热切地”加载。

当你获得对象猴子时,你已经可以访问朋友了

monkey = session.query(Monkey).get(user.id)

friends_list =  monkey.friends