본문 바로가기
파이썬

파이썬 SqlAlchemy-관계 특성으로 필터링

by º기록 2020. 9. 21.
반응형

SQLAlchemy에 대한 경험이 많지 않고 해결할 수없는 문제가 있습니다. 나는 검색을 시도했고 많은 코드를 시도했습니다. 이것은 내 클래스입니다 (가장 중요한 코드로 축소됨).

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)

어머니의 페 노스 코어가 == 10 인 모든 환자를 쿼리하고 싶습니다.

말했듯이 많은 코드를 시도했지만 이해하지 못했습니다. 내 눈에 논리적으로 해결책은

patients = Patient.query.filter(Patient.mother.phenoscore == 10)

출력 할 때 각 요소에 대해 .mother.phenoscore 에 액세스 할 수 있지만이 코드는이를 수행하지 않기 때문입니다.

관계의 속성으로 필터링 할 수있는 (직접) 가능성이 있습니까 (SQL 문 또는 추가 조인 문을 작성하지 않고), 이러한 종류의 필터가 두 번 이상 필요합니다.

쉬운 해결책이 없더라도 모든 답을 얻을 수있어서 기쁩니다.

 

해결 방법

 


patients = Patient.query.filter(Patient.mother.has(phenoscore=10))

또는 가입 (일반적으로 더 빠름) :

patients = Patient.query.join(Patient.mother, aliased=True)                    .filter_by(phenoscore=10)

 

참조 페이지 https://stackoverflow.com/questions/8561470

 

 

반응형

댓글