2009-04-18 21 views
19

mysql數據庫表有一個列,其數據類型是時間(http://dev.mysql.com/doc/refman/5.0/en/time.html)。當訪問表數據時,Python以datetime.timedelta對象的形式返回此列的值。我如何從中提取時間? (我沒有真正理解python手冊中的timedelta是什麼)。Python:如何從datetime.timedelta對象獲取時間?

E.g.在表中的列包含值「18:00:00」 Python的MySQLdb的返回此爲datetime.timedelta(0,64800)


請忽略下面是什麼(它不會返回不同的值) -

增加:無論表中的時間值,python-MySQLdb似乎只返回datetime.timedelta(0,64800)。

注:我使用Python 2.4

回答

28

很奇怪,Python的返回值作爲一個datetime.timedelta。它可能應該返回datetime.time。無論如何,它看起來像是從午夜開始經過的時間(假設表中的列是晚上6點)。爲了轉換爲datetime.time,你可以做以下::

value = datetime.timedelta(0, 64800) 
(datetime.datetime.min + value).time() 

datetime.datetime.mindatetime.time(),當然,記錄爲datetime模塊的一部分,如果你想了解更多信息。

A datetime.timedelta順便說一句,表示兩個datetime.datetime值之間的差異。所以如果你從另一箇中減去一個datetime.datetime,你會得到一個datetime.timedelta。如果您添加datetime.datetimedatetime.timedelta,則會得到datetime.datetime。上面的代碼就是這樣工作的。

+3

我應該提到我第一次嘗試使用`datetime.time.min + value`,但這不起作用,因爲`datetime.time`對象不能添加到`datetime.timedelta`對象中。 – 2009-04-18 21:05:59

2

在我看來,MySQL中的TIME類型旨在用datetime.timedelta在Python中表示時間間隔。從您參考的文檔:

時間值可能範圍從'-838:59:59'到'838:59:59'。小時部分可能非常大,因爲TIME類型不僅可用於表示一天中的時間(必須小於24小時),還可用於表示兩個事件之間的時間間隔或時間間隔(可能遠遠大於24小時,甚至負面)。

將datetime.timedelta轉換爲datetime.time的另一種方法是將列類型更改爲DATETIME並且不使用日期字段。

- 插入:

tIn = datetime.datetime(
    year=datetime.MINYEAR, 
    month=1, 
    day=1, 
    hour=10, 
    minute=52, 
    second=10 
    ) 
cursor.execute('INSERT INTO TableName (TimeColumn) VALUES (%s)', [tIn]) 

- 選擇:

cursor.execute('SELECT TimeColumn FROM TableName') 
result = cursor.fetchone() 
if result is not None: 
    tOut = result[0].time() 
    print 'Selected time: {0}:{1}:{2}'.format(tOut.hour, tOut.minute, tOut.second) 

datetime.time()被調用DateTime對象上獲得一個時間對象。

相關問題