Pertanyaan SQLALchemy dynamic filter_by


Saya tahu Anda dapat membuat filter dinamis untuk kueri untuk SQLAlchemy dengan menyediakan **kwargs untuk filter_by.

Sebagai contoh

    filters = {'id': '123456', 'amount': '232'}
    db.session.query(Transaction).filter_by(**filters)

Di bawah ini adalah pertanyaan saya:

Bagaimana jika saya perlu query dengan klausa "lebih besar dari" atau "kurang dari"? Misalnya (raw SQL):

 select * from transaction t 
 where t.amount > 10 and t.amount < 100;

4
2018-04-27 01:45


asal


Jawaban:


Alih-alih menggunakan filter_by Saya akan merekomendasikan menggunakan filter, itu memberi Anda lebih banyak pilihan.

Misalnya (dari manual):

db.session.query(MyClass).filter(
    MyClass.name == 'some name',
    MyClass.id > 5,
)

Sehubungan dengan kasus Anda:

filters = (
    Transaction.amount > 10,
    Transaction.amount < 100,
)
db.session.query(Transaction).filter(*filters)

10
2018-04-27 07:23