Ini modelnya:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Saya ingin memfilter antara dua tanggal, misalnya untuk memilih semua pengguna dalam interval 18-30 tahun.
Bagaimana cara menerapkannya dengan SQLAlchemy?
Saya berpikir tentang:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Saya tahu ini tidak benar, tetapi bagaimana melakukannya dengan benar?
'1985-01-17'
, Anda juga dapat menggunakandatetime.date(1985, 1, 17)
- mungkin lebih mudah untuk digunakan atau digunakan di beberapa lingkungan.itu sama dengan:
berharap dapat membantu Anda.
sumber
jika Anda ingin mendapatkan seluruh periode:
Itu berarti kisaran: 1985-01-17 00:00 - 1988-01-17 23:59
sumber
func.date
apakah CAST pada kolom yang menghapus waktu dari persamaan => ini BUKAN berarti rentang dengan waktu! Ini hanya berfungsi ketika waktu TIDAK ada dalam kolom - Anda harus MENGHANCURKANnya ke Tanggal seperti ini, atau membuat kolom Tanggal, setelah itu DateTime atau cap waktu - biasanya selesai dengan 00:00 (baik MySQL & PostgreSQL melakukan ini). Solusi yang lebih umum adalah tidak melakukan cast, tetapi untuk mengatur tanggal pengiriman ke .endOfDay () sehingga Anda benar-benar mengirim1988-01-17 23:59:59
ke database untuk membandingkan :)