Sqlalchemy: Query - получить только родителей, когда все дети удовлетворяют условию неравенства - PullRequest
0 голосов
/ 12 мая 2019

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

Мои текущие таблицы:

class Jefe(Base):
    """ Tabla de jefes"""

    __tablename__ = 'jefe'

    id = Column(Integer, primary_key=True)
    nombre = Column(String, unique=True)
    empleado = relationship('Empleado', backref='jefe', cascade='all, delete-orphan')


class Empleado(Base):
    """ Tabla de empleados"""

    __tablename__ = 'empleado'

    id = Column(Integer, primary_key=True)
    jefe_id = Column(Integer, ForeignKey('jefe.id'), nullable=False)
    nombre = Column(String, unique=True)
    salario = Column(Float)

мой фактический запрос:

result = Session.query(Jefe).join(Empleado).filter(Empleado.salario > 120).all()

какой вывод:

Jefe: Yehender carrasco --- id: 1 
 ----------- Empleados
 ----------- nombre: Jesus ramirez --- salario: 150.00 --- id: 1
 ----------- nombre: Erlinda pereira --- salario: 130.00 --- id: 2


Jefe: Kleiver carrasco --- id: 2 
 ----------- Empleados
 ----------- nombre: Jesus carvajal --- salario: 155.00 --- id: 3
 ----------- nombre: Victor araujo --- salario: 135.00 --- id: 4
 ----------- nombre: Cristhiam ochoa --- salario: 105.00 --- id: 9


Jefe: Ivan marquez --- id: 4 
 ----------- Empleados
 ----------- nombre: Eliana ortega --- salario: 145.00 --- id: 7
 ----------- nombre: Sofia marquez --- salario: 133.30 --- id: 8

И я хочу, чтобы второй результат не появлялся, учитывая, что зарплата cristhiam ochoa меньше 120, например:

Jefe: Yehender carrasco --- id: 1 
 ----------- Empleados
 ----------- nombre: Jesus ramirez --- salario: 150.00 --- id: 1
 ----------- nombre: Erlinda pereira --- salario: 130.00 --- id: 2


Jefe: Ivan marquez --- id: 4 
 ----------- Empleados
 ----------- nombre: Eliana ortega --- salario: 145.00 --- id: 7
 ----------- nombre: Sofia marquez --- salario: 133.30 --- id: 8

Я знаю, что должен изменить условие фильтрации, чтобы все дети учитывались, но я не знаю, как это сделать

1 Ответ

0 голосов
/ 14 мая 2019

Вы не настраиваете ваше соединение должным образом. Попробуйте это:

result = Session.query(Jefe).join(Jefe.empleado).filter(Empleado.salario > 120).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...