Python 多对多关系中的Flask SQLAlchemy查询

Python 多对多关系中的Flask SQLAlchemy查询,python,flask,flask-sqlalchemy,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')) )

我有一个多对多的关系,这意味着,我的模型是用户,一个字段是朋友,这将是用户。我已经完成了对关系的查询,但是当我尝试为用户的朋友进行查询时,我的问题就出现了。我的模型和关系如下所示:

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

但是它不起作用。。。需要帮忙吗?谢谢

您不需要自己创建join

change lazy='joined'-项将“急切地”加载到与父项相同的查询中

当你得到对象猴子,你已经有权访问朋友

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

friends_list =  monkey.friends 

但是我想在查询中使用另一个函数,如“paginate”和“order_by”,它不适用于该调用(您以前没有提到过:)。不要使用
friendy=db.Table()
创建
类友谊(db.Model):
。这在sqlalchemy中有解释,然后通过
friends=session.query(友谊).filter(友谊.friends\u id==user.id).all()访问朋友。首先,感谢您的回答!但我有一些“问题”。我不必使用sqlalchemy的查询,而是烧瓶sqlalchemy。我没有改变太多。即将从
db.Table()
更改为一个类,如果您检查您编写的链接中的多对多关系,它建议您拥有一个关系表,就像我所做的那样。