Python使用mysql.connector读取MySQL TIME类型如何转换为合适时间类型
解决方案
方案1:连接配置自动转换(推荐)
mysql.connector 提供了原生参数控制TIME类型的转换逻辑,只需在创建数据库连接时添加time_to_timedelta=False参数,查询得到的TIME字段值会直接返回datetime.time类型,无需额外手动转换。
示例代码:
import mysql.connector db_conn = mysql.connector.connect( host="你的数据库主机", user="用户名", password="密码", database="数据库名", # 新增以下参数关闭TIME转timedelta的默认逻辑 time_to_timedelta=False ) cursor = db_conn.cursor() cursor.execute("SELECT time_field FROM test_table LIMIT 1") res = cursor.fetchone() print(type(res[0])) # 输出:<class 'datetime.time'>
方案2:手动转换timedelta
如果你的MySQL TIME字段存储的值超过24小时范围(MySQL TIME支持范围为-838:59:59~838:59:59),无法直接用方案1自动转换,可以通过简单的函数手动处理:
转换为一天内的datetime.time类型(超过24小时的部分会自动舍去)
import datetime def td_to_time(td: datetime.timedelta) -> datetime.time: total_sec = int(td.total_seconds()) hours = total_sec // 3600 % 24 mins = (total_sec % 3600) // 60 secs = total_sec % 60 return datetime.time(hours, mins, secs)
转换为保留全部时长的字符串
def td_to_time_str(td: datetime.timedelta) -> str: total_sec = int(td.total_seconds()) hours = total_sec // 3600 mins = (total_sec % 3600) // 60 secs = total_sec % 60 return f"{hours:02d}:{mins:02d}:{secs:02d}"
注意事项
- 仅当你存储的TIME字段值都在00:00:00~23:59:59范围内时,使用方案1才不会报错,超出范围的TIME值用方案1自动转换会触发异常。
- 低版本mysql.connector不支持
time_to_timedelta参数时,直接使用方案2即可。
内容的提问来源于stack exchange,提问作者Peleg
相关产品推荐
相关产品推荐

