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

在Python中使用GridDB的TIMESTAMP类型存储信用卡到期日遇问题

解决GridDB中TIMESTAMP类型存储信用卡到期日的问题

问题原因

GridDB的TIMESTAMP类型在Python API中无法直接接收原生datetime对象,需要转换为毫秒级时间戳整数,或通过工具类处理时区与格式匹配。

修正方案

方案1:手动转换为毫秒级时间戳

将Python datetime对象转为UTC时区后,计算从1970年epoch开始的毫秒数,直接传入容器:

import datetime

# 构造UTC时区的到期日时间
expiration_date = datetime.datetime(2028, 12, 1, tzinfo=datetime.timezone.utc)
# 转换为毫秒级时间戳
expiration_ts = int(expiration_date.timestamp() * 1000)

# 定义容器结构
container_info = griddb.ContainerInfo("CreditCard",
                                     [["id", griddb.Type.INTEGER],
                                      ["cardNumber", griddb.Type.BLOB],
                                      ["expirationDate", griddb.Type.TIMESTAMP],
                                      ["ownerName", griddb.Type.STRING]],
                                     griddb.ContainerType.COLLECTION, True)
# 获取实际容器实例(需先通过gridstore连接获取)
container = gridstore.get_container("CreditCard")
# 存入数据
container.put([cardId, encryptedCardNumber, expiration_ts, ownerName])

方案2:使用GridDB TimeUtil工具类(驱动版本支持时)

部分GridDB Python驱动提供了TimeUtil类,可直接转换datetime对象:

import datetime
from griddb.time_util import TimeUtil

# 构造UTC时区的到期日
expiration_date = datetime.datetime(2028, 12, 1, tzinfo=datetime.timezone.utc)
# 转换为GridDB兼容的TIMESTAMP格式
expiration_ts = TimeUtil.datetime_to_timestamp(expiration_date)

# 容器定义与数据存入操作同方案1

关键注意事项

  • 时区必须统一:GridDB的TIMESTAMP默认存储UTC时间,若你的到期日是本地时间,需先转换为UTC:
    local_date = datetime.datetime(2028, 12, 1)
    utc_date = local_date.astimezone(datetime.timezone.utc)
    
  • 容器实例获取:不能直接用ContainerInfo对象调用put,必须通过GridStore连接实例的create_container或get_container获取实际容器对象。
  • 旧容器清理:修改字段类型后,需删除原STRING类型的容器,重新创建新结构的容器,避免类型冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:22:44