5 votes

Comparer DateTime et Intervalle dans SQLAlchemy

J'ai cette classe :

class Monitor(db.Model):
    '''
    Base Monitor class.
    '''
    __tablename__ = 'monitor'
    id = db.Column(db.Integer(), primary_key=True)
    last_checked = db.Column(db.DateTime(timezone=False))
    poll_interval = db.Column(db.Interval(),
                              default=datetime.timedelta(seconds=300))

Et j'ai cette requête où je tente de retourner uniquement les objets qui n'ont pas été contrôlés depuis (maintenant - intervalle) :

monitors = db.session.query(Monitor).\
           filter(or_(Monitor.last_checked < (datetime.utcnow() - Monitor.poll_interval)),
                      Monitor.last_checked == None).\
           all()

Mais la requête ne renvoie rien. J'ai du mal à trouver la bonne façon de procéder. Suis-je sur la bonne voie ou est-ce que quelque chose m'échappe ? J'utilise MySQL comme base de données.

7voto

J.L. Ennis Points 86

Vos parenthèses sont fausses. Je crois que ce que vous voulez est :

monitors = db.session.query(Monitor).\
       filter(or_(Monitor.last_checked < (datetime.utcnow() - Monitor.poll_interval),
                  Monitor.last_checked == None)).\
       all()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X