在mysql中存储python timedelta值的最佳方法是什么?

问题描述 投票:4回答:3

我需要在mysql环境中存储正常运行时间。正常运行时间可能从几小时到一年以上不等。我正在考虑为mysql使用DATETIME类型。我正在使用python,正常运行时间来自

def convertdate(lastrestart):
   # now in datetime
   nowdt=datetime.now()

   # last_restarted in datetime
   lastrestarted_dt=datetime.strptime(lastrestart, "%Y-%m-%d %H:%M:%S")

   # timedelta in datetime! 
   uptimeInDT=nowdt-lastrestarted_dt

   #timedelta in seconds
   secondsUptime=uptimeInDT.seconds

   # string conversion wont work so much for a datetime field.
   print str(uptimeInDT)

这是做这份工作的最佳方式吗?我可以使用其他解决方案吗? mysql中的SEC_TO_TIME()具有较小的范围并且不起作用,并且从秒到日期时间没有任何功能。也许我应该节省秒数并习惯它。谢谢

python mysql datetime-format timedelta python-datetime
3个回答
4
投票

MySQL不提供第一类INTERVAL类型,该类型将是python的timedelta的SQL模拟。

因此,为了存储增量,我建议只需将差值以秒为单位存储在一个足以保持最大预期值的积分字段中。

在“这么多天,几小时,几分钟等”中显示增量格式 - 这是你似乎正在寻找的 - 我建议在客户端代码中这样做。 timedelta对象stringify很好,或者您可以随意滚动自己的格式化程序。

如果你搜索那些试图格式化间隔的人(“X秒前”或“X周前”),你会看到相关的方法和工具包。


1
投票

我建议你采取自己的建议,只需节省秒数。

根据我的经验,它几乎总是更容易存储UNIX时间戳(自* nix时代以来的秒数)而不是实际日期,因为它总是很容易使用。

http://en.wikipedia.org/wiki/Unix_time

然后在输出之前的最后一刻格式化数据。

秒是一种非常有用的存储时间的方法,习惯它! :)


0
投票

使用数据库中的时间时,通常最好使用数据库的当前时间而不是系统的当前时间。如果您只想从数据库中获取当前的正常运行时间并显示它,我会在SQL查询中执行此操作。

SELECT NOW()-lastrestart AS uptime FROM ...

这将在几秒钟内返回正常运行时间。

至于lastrestart字段,我会使用MySQL TIMESTAMP类型。以下是一些原因:

© www.soinside.com 2019 - 2024. All rights reserved.