Python peewee,根据经过的时间过滤查询

Stu*_*Cat 2 python peewee

这是我的“请求”类/表:

class Request(BaseModel):
    TIME_STAMP = DateTimeField(default=datetime.datetime.now)
    MESSAGE_ID = IntegerField()
Run Code Online (Sandbox Code Playgroud)

对于 peewee,我想从表中选择过去 10 分钟内发生的所有“请求”。像这样的东西:

rs = Request.select().where(Request.TIME_STAMP-datetime.datetime.now<(10 minutes))
Run Code Online (Sandbox Code Playgroud)

但是,我不完全确定如何获取 TIME_STAMP 和当前时间(以分钟为单位)之间的差异。

编辑:我已经尝试过 Gerrat 的建议,但 Peewee 似乎哭了:

/usr/local/lib/python2.7/dist-packages/peewee.py:2356: Warning: Truncated incorrect DOUBLE value: '2014-07-19 15:51:24'
  cursor.execute(sql, params or ())
/usr/local/lib/python2.7/dist-packages/peewee.py:2356: Warning: Truncated incorrect DOUBLE value: '0 0:10:0'
  cursor.execute(sql, params or ())
Run Code Online (Sandbox Code Playgroud)

Ger*_*rat 5

我从未使用过 peewee,但如果您只是减去两个时间戳,那么您将得到一个datetime.timedelta对象。然后您应该能够将它与另一个 timedelta 对象进行比较。就像是:

rs = Request.select().where(Request.TIME_STAMP-datetime.datetime.now() 
                            <(datetime.timedelta(seconds=10*60)))
Run Code Online (Sandbox Code Playgroud)

编辑 ...仔细看看 peewee,上面可能不起作用。如果没有,那么应该像下面这样:

ten_min_ago = datetime.datetime.now() - datetime.timedelta(seconds=10 * 60)
rs = Request.select().where(Request.TIME_STAMP > ten_min_ago)
Run Code Online (Sandbox Code Playgroud)

数据库中的时间戳会大于当前时间(您的选择假设的时间)似乎有点奇怪...因此您可能需要添加时间增量并减去相反的值(例如,如果您想选择最近 10 分钟内的记录)。