Nie mam zbyt dużego doświadczenia z SQLAlchemy i problemem, którego nie mogę rozwiązać, ale szukam wielu kodu. To moja klasa (zredukowane do najbardziej znaczącego kodzie):SqlAlchemy - Filtrowanie według atrybutów
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)
i chciałbym zapytać wszystkich pacjentów, których matki phenoscore jest (na przykład) == 10
Jak powiedział, starałem dużo kodu, ale go nie dostaję. Rozwiązanie logicznie, w moich oczach, byłoby
patients = Patient.query.filter(Patient.mother.phenoscore == 10)
ponieważ można uzyskać dostęp .mother.phenoscore dla każdego elementu podczas wyprowadzania, ale ten kod nie zrobić. Czy istnieje (bezpośrednia) możliwość filtrowania według atrybutu relacji (bez pisania instrukcji SQL lub dodatkowej instrukcji join), potrzebuję tego rodzaju filtra więcej niż jeden raz.
Nawet jeśli nie ma prostego rozwiązania, jestem zadowolony wszystkie odpowiedzi
dzięki dużo Christo
pacjenci = Patient.query.filter (Patient.mother.has (Patient.phenoscore == 1 0)) – user1105851
@ user1105851 'has()' obsługuje zarówno wyrażenie warunkowe jako nienazwany argument, jak i argumenty w stylu słowa "filter_by". Później wydaje mi się bardziej czytelny. –
@DenisOtkidach poprawne, ale wtedy byłoby to 'phenoscore = 10'. 'filter_by' przyjmuje tylko słowa kluczowe równościowe (ponieważ po prostu robi ** kwargs na nich) – aruisdante