1. ホーム
  2. python

[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?

2022-07-03 09:18:27

質問

以下はモデルです。

class User(Base):
    ...
    birthday = Column(Date, index=True)   #in database it's like '1987-01-17'
    ...

2つの日付の間でフィルタリングを行いたいのですが、例えば、18-30歳の区間にいるすべてのユーザーを選びたいのですが、どうすればよいでしょうか?

SQLAlchemyでどのように実装すればよいでしょうか?

を考えています。

query = DBSession.query(User).filter(
    and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
) 

# means age >= 24 and age <= 27

これが正しくないことは分かっていますが、どうすれば正すことができるのでしょうか?

どのように解決するのですか?

実際、あなたのクエリはタイプミスを除けば正しいです。あなたのフィルタはすべてのレコードを除外しています。 <=>= であり、その逆も同様です。

qry = DBSession.query(User).filter(
        and_(User.birthday <= '1988-01-17', User.birthday >= '1985-01-17'))
# or same:
qry = DBSession.query(User).filter(User.birthday <= '1988-01-17').\
        filter(User.birthday >= '1985-01-17')

また between :

qry = DBSession.query(User).filter(User.birthday.between('1985-01-17', '1988-01-17'))