mysql数据库表有一个数据类型为time(http://dev.mysql.com/doc/refman/5.0/en/time.html)的列。访问表数据时,Python将此列的值作为datetime.timedelta对象返回。如何从中抽出时间? (我真的不明白pydel手册中的timedelta是什么意思)。
E.g。表中的列包含值“18:00:00” Python-MySQLdb将其返回为datetime.timedelta(0,64800)
请忽略下面的内容(它会返回不同的值) -
已添加:无论表中的时间值如何,python-MySQLdb似乎只返回datetime.timedelta(0,64800)。
注意:我使用的是Python 2.4
答案 0 :(得分:36)
奇怪的是,Python将值返回为datetime.timedelta
。它可能应该返回datetime.time
。无论如何,看起来它正在返回自午夜起经过的时间(假设表中的列是下午6:00)。要转换为datetime.time
,您可以执行以下操作::
value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()
当然,如果您需要更多信息, datetime.datetime.min
和datetime.time()
会被记录为datetime模块的一部分。
顺便说一句,datetime.timedelta
表示两个datetime.datetime
值之间的差异。因此,如果您从另一个中减去一个datetime.datetime
,您将获得datetime.timedelta
。如果您使用datetime.datetime
添加datetime.timedelta
,则会获得datetime.datetime
。这就是上面代码的工作方式。
答案 1 :(得分:2)
在我看来,MySQL中的TIME类型旨在表示日期时间间隔。时间间隔在Python中表示。来自您引用的文档:
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()来获取时间对象。