GridDB Cloud Python客户端向TIMESTAMP列插入datetime对象的正确方法
向GridDB Cloud的TIMESTAMP列插入Python datetime对象的正确方式
问题场景
在Ubuntu 22.04系统上使用GridDB Cloud(免费版)及官方最新pip版本的Python客户端,容器Schema定义如下:
device_id STRING, created_at TIMESTAMP, temperature DOUBLE
尝试插入带当前时间戳的数据时触发错误:
from datetime import datetime row = ["sensor_1", datetime.now(), 21.5] container.put(row)
错误信息:
griddb.TimeConversionError: Invalid format for TIMESTAMP
尝试转换为ISO格式字符串后仍无效:
row = ["sensor_1", datetime.now().isoformat(), 21.5]
正确解决方案
GridDB Python客户端对TIMESTAMP类型的支持需要特定格式的输入,以下两种方式均有效:
方式1:传入毫秒级UTC时间戳数值
GridDB的TIMESTAMP本质存储的是从1970-01-01 UTC开始的毫秒数,直接转换为该数值是最可靠的方式:
from datetime import datetime # 将当前时间转换为毫秒级UTC时间戳 current_timestamp = int(datetime.now().timestamp() * 1000) row = ["sensor_1", current_timestamp, 21.5] container.put(row)
方式2:使用严格格式的UTC时间字符串
若要使用字符串格式,必须遵循YYYY-MM-DDTHH:MM:SS.fffZ的标准UTC格式(需包含毫秒部分和结尾的Z标识时区):
from datetime import datetime # 生成符合要求的UTC时间字符串 current_time_str = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z" row = ["sensor_1", current_time_str, 21.5] container.put(row)
关键说明
- 直接传入Python原生
datetime对象不被客户端支持,必须转换为上述两种格式之一。 - 使用时间戳数值的方式避免了时区和格式解析的问题,推荐优先使用。
内容的提问来源于stack exchange,提问作者Imtiaz
相关产品推荐
相关产品推荐

