You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:24:05