2012-11-02 168 views
2

我需要在mysql環境中存儲正常運行時間。 正常運行時間可以從幾小時到一年以上不等。我正在考慮對mysql使用DATETIME類型。 我使用Python,並從在mysql中存儲python timedelta值的最佳方式是什麼?

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()有一個較小的範圍,不會工作,並且從秒到日期時間沒有功能。也許我應該保存秒數並習慣這一點。 謝謝

回答

3

MySQL不提供一流的INTERVAL類型,哪種類型將是Python的timedelta的SQL模擬。

因此,要商店三角洲,我會建議簡單地存儲在一個積分領域足夠大,以保持您的最大期望值的差秒。

顯示三角洲在一個「這麼多天,小時,分鐘等」格式 - 這是你似乎在尋找的 - 我會建議在客戶端代碼中這樣做。 timedelta對象很好地串起來,或者你可以根據自己的喜好來製作自己的格式化程序。

如果您對試圖格式化間隔(「X秒前」或「X周前」)的人進行搜索,您會看到相關的方法和工具包。

0

在使用數據庫中的時間時,通常最好使用數據庫的當前時間而不是系統的當前時間。如果你只是想從數據庫中獲取當前的正常運行時間並顯示它,我會在SQL查詢中這樣做。

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

這將以秒爲單位返回正常運行時間。

至於lastrestart字段,我會使用MySQL TIMESTAMP類型。下面是一些原因:

+0

我不明白。 我並不需要使用時間戳,因爲: -Timestamp不能01-01-1970之前保存值(和我需要的範圍從00-00-000到XX-XX-0004最大值) - 這不是我「T需要我每次訪問時間來更新該字段或已經使用時間戳字段 – asdf

+0

這取決於數據是如何被存儲在表中修改行 - 我。每當行被「插入」或「更新」時,'timestamp'總會被更新,這可能是也可能不是所希望的。 編輯:我張貼這種權利@superagio回答後。我同意,你可能希望將'lastrestarted'作爲日期時間存儲。如果你告訴MySQL'ON UPDATE CURRENT_TIMESTAMP' –

+0

了'TIMESTAMP'只更新,當你設置你的數據庫表。默認情況下它不會改變,除非你自己這樣做。 –

1

我建議你採取自己的建議,只保存秒。

我的經驗,它幾乎總是比實際日期更容易存儲UNIX時間戳(自* nix時代以來的秒數),因爲它總是很容易處理。

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

然後,只需在輸出前的最後一刻格式化數據。

秒是一個非常有用的方式來存儲時間,習慣它! :)

相關問題