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

Python2从PostgreSQL取数生成XML:datetime序列化报错及转换咨询

解决Python2中ElementTree无法序列化datetime到XML的问题

这个问题我之前在处理数据库导出XML的时候也碰到过——ElementTree的元素text属性只接受字符串类型,而你从PostgreSQL用fetchall()拿到的row[7]、row[8]这些是datetime.datetime对象,直接赋值自然会抛出Cannot serialize datetime...的错误。

给你两个实用的解决办法:

方法1:直接转成字符串(简单快速)

如果对日期格式没有特殊要求,直接用str()函数把datetime对象转成字符串就行:

for row in rows:
    Jobs = ET.SubElement(JobList, 'Jobs')
    # ... 其他代码 ...
    scheduledTime.text = str(row[7])
    startTime.text = str(row[8])
    endTime.text = str(row[9])
    # ... 其他代码 ...
myJobList = ET.tostring(JobList)

这种方式会输出类似2018-02-04 23:05:00的格式,和PostgreSQL默认的datetime字符串格式一致。

方法2:自定义日期格式(更灵活)

如果需要指定XML里的日期格式(比如符合ISO 8601标准,或者其他业务要求的格式),用datetime对象的strftime()方法来生成自定义字符串:

for row in rows:
    Jobs = ET.SubElement(JobList, 'Jobs')
    # ... 其他代码 ...
    # 转成YYYY-MM-DD HH:MM:SS格式
    scheduledTime.text = row[7].strftime("%Y-%m-%d %H:%M:%S")
    startTime.text = row[8].strftime("%Y-%m-%d %H:%M:%S")
    endTime.text = row[9].strftime("%Y-%m-%d %H:%M:%S")
    # ... 其他代码 ...
myJobList = ET.tostring(JobList)

你可以根据需求修改strftime的格式参数,比如要带毫秒就用%Y-%m-%d %H:%M:%S.%f,要转成特定时区格式也可以结合datetime的时区方法处理。

本质上就是要把数据库返回的datetime对象显式转换为字符串,这样ElementTree才能正常序列化到XML中。

内容的提问来源于stack exchange,提问作者Micolho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:57