24

mysql 数据库表有一个数据类型为时间的列(http://dev.mysql.com/doc/refman/5.0/en/time.html)。当访问表数据时,Python 将此列的值作为 datetime.timedelta 对象返回。我如何从中提取时间?(我真的不明白 python 手册中的 timedelta 是什么)。

例如,表中的列包含值“18:00:00” Python-MySQLdb 将其返回为 datetime.timedelta(0, 64800)


请忽略下面的内容(它确实返回不同的值) -

补充:不管表中的时间值如何,python-MySQLdb 似乎只返回 datetime.timedelta(0, 64800)。

注意:我使用 Python 2.4

4

2 回答 2

44

奇怪的是 Python 将值作为datetime.timedelta. 它可能应该返回一个datetime.time. 无论如何,看起来它正在返回自午夜以来经过的时间(假设表中的列是下午 6:00)。为了转换为 a datetime.time,您可以执行以下操作:

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

datetime.datetime.min当然,如果您想了解更多信息,它们会被记录为 datetime 模块的datetime.time()一部分

顺便说一下, A是两个值datetime.timedelta之间差异的表示。datetime.datetime因此,如果您datetime.datetime从另一个中减去一个,您将得到一个datetime.timedelta. 如果你datetime.datetime用 a添加 a datetime.timedelta,你会得到一个datetime.datetime. 上面的代码就是这样工作的。

于 2009-04-18T21:04:40.427 回答
2

在我看来,MySQL 中的 TIME 类型旨在表示时间间隔,就像 Python 中的 datetime.timedelta 一样。从您引用的文档中:

TIME 值的范围可以从“-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 对象上调用 datetime.time() 以获取时间对象。

于 2014-10-31T09:57:54.173 回答