Внешнее соединение одной и той же таблицы дважды с использованием flask -sqlalchemy - PullRequest
0 голосов
/ 06 августа 2020

У меня проблемы с присоединением таблицы user_account к user_evaluation

class user_account(db.Model):
    user_id  = db.Column(db.Integer, primary_key=True)
    f_name   = db.Column(db.String(100), unique=False, nullable=False)
    l_name   = db.Column(db.String(100), unique=False, nullable=False)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email    = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(250), unique=False, nullable=False)
    p_number = db.Column(db.String(20), unique=False, nullable=True, default='Not Set')
    is_admin = db.Column(db.Boolean, unique=False, default=False)
    is_eval  = db.Column(db.Boolean, unique=False, default=False)
    is_active= db.Column(db.Boolean, unique=False, default=True)
    is_banned= db.Column(db.Boolean, unique=False, default=False)
    user_img = db.Column(db.String(50), default='not-set-profile.png')

class user_evaluation(db.Model):
    id      = db.Column(db.Integer, primary_key=True, nullable=False)
    user_id = db.Column(db.Integer, nullable=False)
    eval_id = db.Column(db.Integer, nullable=False)
    score   = db.Column(db.Integer, nullable=False)
    comment = db.Column(db.String(150), nullable=False)

ТАБЛИЦА user_account:

Image of user_account table

TABLE user_evaluation:

Image of user_evaluation table

I have two tables called user_account and user_evaluation. I would like to join the table user_account twice with user_evaluation and get results as following:

enter image description here

The result above is what I want using flask-sqlalchemy. Current statement I'm using but isn't working is:

from sqlalchemy.orm import aliased

user_acc = aliased(user_account)
evaluation_report = db.session.query(user_account, user_evaluation).outerjoin(user_evaluation, user_evaluation.user_id==user_account.user_id).filter(user_account.user_id==user_evaluation.user_id).outerjoin(user_account.user_id==user_evaluation.user_id).all()      

Обратите внимание: eval_id также должен присоединяться к user_id в таблице user_account.

...