Aqui está o modelo:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Quero filtrar entre duas datas, por exemplo, para escolher todos os usuários no intervalo de 18 a 30 anos.
Como implementá-lo com SQLAlchemy?
Eu penso em:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Eu sei que isso não é correto, mas como fazer correto?
'1985-01-17'
, você também pode usardatetime.date(1985, 1, 17)
- pode ser mais fácil de acessar ou trabalhar em alguns ambientes.é igual a:
desejo pode ajudá-lo.
fonte
se você deseja obter todo o período:
Isso significa variam: 1985/01/17 00:00 - 1988/01/17 23:59
fonte
func.date
faz ELENCO na coluna que remove o tempo a partir da equação => isso faz NÃO gama média com o tempo! Isso só funciona quando o tempo NÃO está na coluna - você deve CAST para Date assim, ou fazer a coluna Date, uma vez que é DateTime ou timestamp - geralmente termina com 00:00 (ambos MySQL e PostgreSQL fazem isso). Uma solução mais genérica não é lançar, mas definir a data que você está enviando em .endOfDay () para que você realmente envie1988-01-17 23:59:59
para o banco de dados compare :)