Ich habe nicht viel Erfahrung mit SQLAlchemy und ich habe ein Problem, das ich nicht lösen kann. Ich habe versucht zu suchen und ich habe viel Code ausprobiert. Dies ist meine Klasse (reduziert auf den wichtigsten Code):
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)
und ich möchte alle Patienten befragen, deren Phenoscore der Mutter ist (zum Beispiel) == 10
Wie gesagt, ich habe viel Code ausprobiert, aber ich verstehe ihn nicht. Die logische Lösung wäre in meinen Augen
patients = Patient.query.filter(Patient.mother.phenoscore == 10)
Sie können .mother.phenoscore
bei der Ausgabe auf jedes Element zugreifen , dieser Code tut dies jedoch nicht.
Gibt es eine (direkte) Möglichkeit, nach einem Attribut einer Beziehung zu filtern (ohne die SQL-Anweisung oder eine zusätzliche Join-Anweisung zu schreiben), benötige ich diese Art von Filter mehr als einmal.
Auch wenn es keine einfache Lösung gibt, freue ich mich über alle Antworten.
quelle
has()
unterstützt sowohl Bedingungsausdrücke als unbenanntes Argument als auchfilter_by
-style-Schlüsselwortargumente. Letzteres erscheint mir lesbarer.phenoscore = 10
.filter_by
nimmt nur Gleichheitsschlüsselwörter (da es nur ** kwargs auf ihnen macht)Sie müssen die Beziehung mit join abfragen
Sie erhalten das Beispiel aus diesen selbstreferenziellen Abfragestrategien
quelle
Ich habe es für Sitzungen verwendet, aber eine alternative Möglichkeit, direkt auf das Beziehungsfeld zuzugreifen, ist
Ich habe es nicht getestet, aber ich denke, das würde auch funktionieren
quelle
Gute Nachrichten für Sie: Ich habe kürzlich ein Paket erstellt, mit dem Sie wie in Django mit "magischen" Zeichenfolgen filtern / sortieren können, sodass Sie jetzt so etwas wie schreiben können
Es ist viel kürzer, insbesondere für komplexe Filter, z.
Ich hoffe, Sie werden dieses Paket genießen
https://github.com/absent1706/sqlalchemy-mixins#django-like-queries
quelle
Dies ist eine allgemeinere Antwort zum Abfragen von Beziehungen.
Dies ermöglicht Ihnen:
quelle