No tengo mucha experiencia con SQLAlchemy y un problema, que no puedo resolver sino buscar un código que intenta mucho. Esta es mi clase (reducido a un código más significativo):SqlAlchemy - Filtrando por relación Atributo
class Patient(Base):
__tablename__ = 'patients'
id = Column(Integer, primary_key=True, nullable=False)
mother_id = Column(Integer, ForeignKey('patients.id'), index=True)
mother = relationship('Patient', primaryjoin='Patient.id==Patient.mother_id', remote_side='Patient.id', uselist=False)
phenoscore = Column(Float)
y me gustaría para consultar todos los pacientes, cuya madre phenoscore es (por ejemplo) == 10
Según lo dicho, he intentado un montón de código, pero no lo entiendo La solución lógicamente, en mi opinión, sería
patients = Patient.query.filter(Patient.mother.phenoscore == 10)
debido, puede acceder a .mother.phenoscore para cada elemento, pero cuando se da salida, este código no lo hace. Existe la posibilidad (directa) de filtrar por un atributo de una relación (sin escribir la declaración SQL, o una declaración de combinación adicional), necesito este tipo de filtro más de una vez.
Aunque no existe una solución fácil, estoy feliz por todas las respuestas
muchas gracias Christo
pacientes Patient.query.filter (Patient.mother.has (Patient.phenoscore == 1 0)) – user1105851
@ user1105851 'has()' admite tanto la expresión de la condición como el argumento sin nombre y los argumentos de la palabra clave 'filter_by'-style. El último me parece más legible. –
@DenisOtkidach correcto, pero entonces sería 'phenoscore = 10'. 'filter_by' solo toma palabras clave de igualdad (ya que solo está haciendo ** kwargs en ellas) – aruisdante