Aquí está el modelo:
class User(Base):
...
birthday = Column(Date, index=True) #in database it's like '1987-01-17'
...
Quiero filtrar entre dos fechas, por ejemplo, para elegir a todos los usuarios en un intervalo de 18 a 30 años.
¿Cómo implementarlo con SQLAlchemy?
Pienso:
query = DBSession.query(User).filter(
and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17')
)
# means age >= 24 and age <= 27
Sé que esto no es correcto, pero ¿cómo hacerlo?
'1985-01-17'
, también puede usardatetime.date(1985, 1, 17)
: puede ser más fácil de acceder o trabajar en algunos entornos.es igual a:
deseo puede ayudarte.
fuente
si desea obtener todo el período:
Eso significa rango: 1985-01-17 00:00 - 1988-01-17 23:59
fuente
func.date
hace CAST en la columna que elimina el tiempo de la ecuación => ¡esto NO significa rango con el tiempo! Esto solo funciona cuando el tiempo NO está en la columna; debe CASTARlo a la fecha de esta manera, o hacer que la columna sea Fecha, una vez que sea DateTime o marca de tiempo; generalmente termina con 00:00 (tanto MySQL como PostgreSQL hacen esto). Una solución más genérica no es emitir, sino establecer la fecha en la que está enviando su .endOfDay () para que realmente envíe1988-01-17 23:59:59
a la base de datos compare :)