我正在制作一个愿望清单应用,我想拥有类似波纹管的数据库架构,但是我不知道如何在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_id
和arranger_id
是相同的...
要完成这项工作,我需要做什么?
答案 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])