Запрос одной таблицы с базой данных отношений Flask-SQLAlchemy - PullRequest
1 голос
/ 31 мая 2019

У меня есть три таблицы: Пользователь, Роль, Отдел

Я хочу опросить всех пользователей с выбранными следующими фильтрами: Department.name , Role.name and User.degree

Я не могу найти решение дляэта проблема, любое предложение было бы здорово!

Вот мои упрощенные модели:

class User(UserMixin, db.Model):

    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    password_hash = db.Column(db.String(128))
    degree = db.Column(db.String(20),default=None)
    department_id = db.Column(db.Integer, db.ForeignKey('departments.id'))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))


class Department(db.Model):

    __tablename__ = "departments"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(sqlalchemy.types.NVARCHAR(100), unique=True)
    user = db.relationship('User', backref='department',
                                lazy='dynamic')

class Role(db.Model):

    __tablename__ = 'roles'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(sqlalchemy.types.NVARCHAR(100), unique=True)
    users = db.relationship('User', backref='role',
                                lazy='dynamic')

Ответы [ 2 ]

2 голосов
/ 31 мая 2019
session.query(User).filter(
User.department.has(name='some_name)).filter(
User.role.has(name='some_role')).filter(
User.degree == 'some_degree')
1 голос
/ 31 мая 2019

Это простой запрос с объединениями. Вы можете изменить «отдел» с вашим фильтром отдела и «роль» с тем же. Вы должны изменить выбранную деталь (session.query(User.id)) с полями, которые вы хотите.

users = (session.query(User.id).join(Department, Department.user == User.id).join(Role, Role.user == User.id).filter(Department.name=="department").filter(Role.name=="role").group_by(User.id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...