Saya tidak punya banyak pengalaman dengan SQLAlchemy dan saya punya masalah, yang tidak bisa saya pecahkan. Saya mencoba mencari dan saya mencoba banyak kode. Ini adalah Kelas saya (dikurangi menjadi kode yang paling signifikan):
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)
dan saya ingin menanyakan semua pasien, yang fenoscore ibunya (misalnya) == 10
Seperti yang diceritakan, saya mencoba banyak kode, tetapi saya tidak mengerti. Solusi logisnya, di mata saya, adalah
patients = Patient.query.filter(Patient.mother.phenoscore == 10)
karena, Anda dapat mengakses .mother.phenoscore
setiap elemen saat mengeluarkan tetapi, kode ini tidak melakukannya.
Apakah ada kemungkinan (langsung) untuk memfilter berdasarkan atribut hubungan (tanpa menulis Pernyataan SQL, atau pernyataan gabungan tambahan), saya memerlukan filter semacam ini lebih dari satu kali.
Meskipun tidak ada solusi yang mudah, saya senang mendapatkan semua jawaban.
sumber
has()
mendukung kedua ekspresi kondisi sebagai argumen tanpa nama danfilter_by
argumen kata kunci -gaya. Nanti tampaknya lebih mudah dibaca oleh saya.phenoscore = 10
.filter_by
hanya mengambil kata kunci kesetaraan (karena itu hanya melakukan ** kwargs pada mereka)Anda harus menanyakan relasi dengan join
Anda akan mendapatkan contoh dari Strategi Kueri Referensi-Mandiri ini
sumber
Saya menggunakannya dengan sesi, tetapi cara alternatif di mana Anda dapat mengakses bidang hubungan secara langsung adalah
Saya belum mengujinya, tapi saya rasa ini juga akan berhasil
sumber
Kabar baik untuk Anda: Saya baru-baru ini membuat paket yang memberi Anda pemfilteran / penyortiran dengan string "ajaib" seperti di Django , jadi Anda sekarang dapat menulis sesuatu seperti
Ini jauh lebih singkat, terutama untuk filter yang rumit, misalnya,
Semoga Anda menikmati paket ini
https://github.com/absent1706/sqlalchemy-mixins#django-like-queries
sumber
Ini adalah jawaban yang lebih umum tentang cara menanyakan hubungan.
Ini memungkinkan Anda untuk:
sumber