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

What's the best way to store a python timedelta value in mysql?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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-u-time()范围较小,无法工作,sec-to-datetime之间没有函数。也许我应该节省时间来适应。谢谢


MySQL不提供第一类间隔类型,该类型将类似于python的timedelta

所以,为了存储delta,我建议简单地将差分以秒为单位存储在一个足够大的整型字段中,以保存最大的期望值。

要以"这许多天、小时、分钟等"格式显示delta,这是您似乎在寻找的格式,我建议您在客户机代码中这样做。timedelta对象的字符串化很好,或者您可以根据需要滚动自己的格式化程序。

如果你搜索那些试图设置时间间隔格式的人("x秒前"或"x周前"),你会看到相关的方法和工具包。


我建议你采纳自己的建议,节省时间。

我的经验是,存储一个unix时间戳(从*nix epoch开始的秒数)几乎总是比实际日期容易,因为它总是易于使用。

http://en.wikipedia.org/wiki/unixu时间

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

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


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

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

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

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

  • 何时使用日期时间或时间戳