SQLAlchemy多个联接到单个表

时间:2019-01-08 14:52:17

标签: python join flask sqlalchemy

我正在制作一个愿望清单应用,我想拥有类似波纹管的数据库架构,但是我不知道如何在sqlalchemy中进行联接(这是我第一次使用sqlalchemy)。

DB schema用户:wish = 1:N

当我选择一个用户时,我想要一个愿望列表,每个愿望可能包含一个不同的用户(愿望的安排者)

所以我可以做这样的事情

first_user = User.query.get(1)
user_wishes = first_user.wishes.all()

for wish in user_wishes:
    if wish.arranger is not None:
        print(wish.id, wish.owner.id, wish.arranger.id)
    else:
        print(wish.id, wish.owner.id)

我看了一些教程,但是我只发现简单的关系。 我需要一个从 User Wish 的关系,在 Wish 中,回到两个 UserWishOwner (来自我到这里了) UserWishArranger (如果有的话)。

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    wishes = db.Column(db.relationship('Wish', backref='owner', lazy='dynamic'))

class Wish(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
    arranger_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)

    arranger = relationship("User", foreign_keys=[arranger_id])

我想出了一些代码,但是有些困惑,因为owner_idarranger_id是相同的...

要完成这项工作,我需要做什么?

1 个答案:

答案 0 :(得分:0)

就这样

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    wishes = db.relationship('Wish', backref='owner', lazy='dynamic', foreign_keys="[Wish.owner_id]")

class Wish(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
    arranger_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)

    arranger = db.relationship("User", foreign_keys=[arranger_id])