我试图用Python获取MySQL中的时间戳列表。一旦我有了清单,我现在就检查时间,并检查哪些时间比15分钟前长。一旦我有了这些,我真的想要一个最终的总数。这似乎比我原先认为的更具挑战性。在
所以,我用这个从MySQL获取列表:
db = MySQLdb.connect(host=server, user=mysql_user, passwd=mysql_pwd, db=mysql_db, connect_timeout=10)
cur = db.cursor()
cur.execute("SELECT heartbeat_time FROM machines")
row = cur.fetchone()
print row
while row is not None:
print ", ".join([str(c) for c in row])
row = cur.fetchone()
cur.close()
db.close()
>> 2016-06-04 23:41:17
>> 2016-06-05 03:36:02
>> 2016-06-04 19:08:56
这是我用来检查它们是否比15分钟前长的片段:
^{pr2}$但我不知道我怎么能把这些结合起来。另外,既然我把它写下来了,一定有一个更简单/更好的方法来过滤这些?在
谢谢你的建议!在
您可以将15分钟的检查直接合并到SQL查询中。这样,就不需要再纠结于时间戳了,而且在我看来,读代码要容易得多。在
如果需要表格中其他列的日期:
select * from machines where now() > heartbeat_time + INTERVAL 15 MINUTE;
如果您只对总数感兴趣:
SELECT count(*) FROM machines WHERE NOW() > heartbeat_time + INTERVAL 15 MINUTE;
这样你就可以当前取款()并获取None或tuple,其中第一个值是时间戳早于15分钟的行数。在
对于迭代resultset,它应该足够编写
因为基游标的行为已经类似于使用.fetchone()的迭代器。在
(假设您的数据库中有您在问题中所述的时间戳)
@user5740843:
if str(result) >= 15:
将无法按预期工作。因为True
,所以它总是True
。在我假设
heartbeat_time
字段是日期时间字段。在如果数据大小不是那么大,那么将它们全部加载到内存是一个很好的做法,这将释放MySQL服务器上的内存缓冲区。而对于DictCursor来说
^{pr2}$以及
它们都将数据加载到客户端。MySQLdb.SSCursorSSDictCursor将根据需要尝试传输数据,而它需要MySQL服务器支持。在
相关问题 更多 >
编程相关推荐