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
Я знаю, что это не правильно, но как это сделать правильно?
спасибо заранее!
2 ответа:
фактически, ваш запрос прав, за исключением опечатки: ваш фильтр исключает все записи: вы должны изменить
<=
на>=
и наоборот: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'))
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
желание может помочь вам.