Saya telah melihat -lihat dokumen dan sepertinya saya tidak bisa menemukan cara melakukan kueri ATAU dalam SQLAlchemy. Saya hanya ingin melakukan kueri ini.
SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
Seharusnya seperti itu
addr = session.query(AddressBook).filter(City == "boston").filter(????)
python
sqlalchemy
JiminyCricket
sumber
sumber
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))
in_
operator seperti ini:filter(User.name.in_(['Alice', 'Bob', 'Carl']))
SQLAlchemy membebani operator bitwise
&
,|
dan~
alih-alih sintaks awalan yang jelek dan sulit dibaca denganor_()
danand_()
(seperti dalam jawaban Bastien ) Anda dapat menggunakan operator ini:Perhatikan bahwa tanda kurung tidak opsional karena didahulukan dari operator bitwise.
Jadi seluruh permintaan Anda dapat terlihat seperti ini:
sumber
&
antara mereka dan yang pertama (daripada menggunakanfilter
panggilan kedua ) untuk efek yang sama?or_()
fungsi dapat berguna jika ada jumlah komponen permintaan OR yang tidak diketahui.Misalnya, mari kita asumsikan bahwa kita membuat layanan REST dengan beberapa filter opsional, yang akan mengembalikan catatan jika ada filter yang mengembalikan true. Di sisi lain, jika parameter tidak didefinisikan dalam permintaan, permintaan kami tidak boleh berubah. Tanpa
or_()
fungsi kita harus melakukan sesuatu seperti ini:Dengan
or_()
fungsi itu dapat ditulis ulang untuk:sumber
Ini sangat membantu. Ini implementasi saya untuk tabel apa saja:
sumber