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的
所以,为了存储delta,我建议简单地将差分以秒为单位存储在一个足够大的整型字段中,以保存最大的期望值。
要以"这许多天、小时、分钟等"格式显示delta,这是您似乎在寻找的格式,我建议您在客户机代码中这样做。
如果你搜索那些试图设置时间间隔格式的人("x秒前"或"x周前"),你会看到相关的方法和工具包。
我建议你采纳自己的建议,节省时间。
我的经验是,存储一个unix时间戳(从*nix epoch开始的秒数)几乎总是比实际日期容易,因为它总是易于使用。
http://en.wikipedia.org/wiki/unixu时间
然后在输出前的最后一刻格式化数据。
秒是一种非常有用的存储时间的方法,习惯吧!:)
使用数据库中的时间时,通常最好使用数据库的当前时间,而不是系统的当前时间。如果您只想从数据库中获取当前的正常运行时间并显示它,我将在SQL查询中这样做。
1 | SELECT NOW()-lastrestart AS uptime FROM ... |
这将在几秒钟内返回正常运行时间。
至于
- 何时使用日期时间或时间戳