mysql 如何从Datetime.timeDelta对象中获取时间?

dhxwm5r4  于 2022-12-10  发布在  Mysql
关注(0)|答案(2)|浏览(175)

MySQL数据库表有一列的数据类型为TIME(http://dev.mysql.com/doc/refman/5.0/en/time.html)。当访问表数据时,Python将该列的值作为Datetime.timeDelta对象返回。我怎么才能从中提取时间呢?(我并不是真的从Python手册中理解了时间增量的用途)。
例如,表中的列包含值“18:00:00”PYTHON-MySQLdb将其返回为Datetime.timeDelta(0,64800)
请忽略下面的内容(它返回不同的值)-

  • 新增:不管表中的时间值是多少,python-MySQLdb似乎只返回日期时间.timeDelta(0,64800)。*

注:我使用的是Python2.4

a7qyws3x

a7qyws3x1#

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

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

当然,如果您需要更多信息,datetime.datetime.mindatetime.time()将作为datetime模块的一部分进行记录。
顺便说一句,datetime.timedelta是两个datetime.datetime值之间的差异的表示。所以,如果你用一个datetime.datetime减去另一个datetime.datetime,你会得到一个datetime.timedelta。如果将datetime.datetimedatetime.timedelta相加,则会得到datetime.datetime。这就是上面的代码的工作方式。

xxhby3vn

xxhby3vn2#

在我看来,MySQL中的Time类型旨在表示时间间隔,就像Python中的Datetime.timeDelta一样。从您引用的文档中:
时间值的范围可以是‘-838:59:59’到‘838:59:59’。小时部分可能很大,因为时间类型不仅可以用来表示一天中的时间(必须小于24小时),还可以用来表示经过的时间或两个事件之间的时间间隔(可以远远大于24小时,甚至是负数)。
除了从日期时间增量转换为日期时间之外,另一种方法是将列类型更改为日期时间,而不使用日期字段。
-插入:

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对象上调用DateTim.time()以获取Time对象。

相关问题