问题:SQLAlchemy:如何过滤日期字段?
这是模型:
class User(Base):
    ...
    birthday = Column(Date, index=True)   #in database it's like '1987-01-17'
    ...
我想在两个日期之间进行过滤,例如选择间隔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
我知道这是不正确的,但是该怎么做正确呢?
回答 0
实际上,除了错别字,您的查询是正确的:您的过滤器排除了所有记录:您应该更改<=for >=,反之亦然:
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'))
回答 1
from app import SQLAlchemyDB as db
Chance.query.filter(Chance.repo_id==repo_id, 
                    Chance.status=="1", 
                    db.func.date(Chance.apply_time)<=end, 
                    db.func.date(Chance.apply_time)>=start).count()
它等于:
select
   count(id)
from
   Chance
where
   repo_id=:repo_id 
   and status='1'
   and date(apple_time) <= end
   and date(apple_time) >= start
希望可以帮助你。
回答 2
如果要获得整个期间:
    from sqlalchemy import and_, func
    query = DBSession.query(User).filter(and_(func.date(User.birthday) >= '1985-01-17'),\
                                              func.date(User.birthday) <= '1988-01-17'))
这表示范围:1985-01-17 00 : 00-1988-01-17 23:59
	声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
