SQLAlchemy несколько объединений в одну таблицу - PullRequest
0 голосов
/ 08 января 2019

Я делаю приложение для списка желаний и хочу иметь схему БД, как показано ниже, но я не могу понять, как сделать соединения в sqlalchemy (это первый раз, когда я использую sqlalchemy).

Схема БД ( пользователь: 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)

Я просмотрел несколько учебных пособий, но нашел только простые отношения. Мне нужно отношение от Пользователь до Желание и в Желание , обратно к UserWishOwner (пользователь, от которого я получил здесь ) a 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 - это одно и то же ...

Что мне нужно сделать, чтобы эта работа работала?

1 Ответ

0 голосов
/ 10 января 2019

Так же, как это

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...