2014-05-05 190 views
1

我有一个多对多的关系,这意味着,我的模型是用户和一个字段是朋友,这将是用户。我已经完成了它的关系,但是当我尝试为用户的朋友进行查询时,我的问题就出现了。我的模型和关系是这样的: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') 

而且从德认为,如果我想要做的查询,我已经试过的东西

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

卜它不工作...任何请帮助?谢谢!

回答

0

您不需要自己创建连接。

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

,当你得到对象猴子,你已经用上了朋友

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

friends_list = monkey.friends 
+0

但我想使用其他功能在查询中,为“分页”和“ORDER_BY”,它不与呼叫 – alvgarvilla

+0

你工作之前没有提到这个:)。 而不是使用'友谊= db.Table()'创建'类友谊(db.Model):'。 这在sqlalchemy [documentation](http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#association-object) – qwetty

+0

中解释,然后通过'friends = session.query(Friendship ).filter(Friendship.friend_id == user.id).all()' – qwetty