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

通过ORM赋值创建JSONB时如何添加CURRENT_TIMESTAMP

解决方案

你遇到的问题是因为text('CURRENT_TIMESTAMP')是SQLAlchemy的SQL表达式对象,无法被JSON序列化。根据你想要服务器事务时间戳的需求,有两种可行的处理方式:

方式一:让数据库生成并封装时间戳到JSONB

直接通过SQLAlchemy的数据库函数构造包含服务器时间的JSONB对象,这样数据库会在执行SQL时计算CURRENT_TIMESTAMP并封装成JSON结构:

from sqlalchemy import func

# 使用jsonb_build_object构造包含服务器时间的JSONB
mymodel.data = func.jsonb_build_object('a', func.current_timestamp())

如果是要更新已有JSONB字段的指定键,可以用jsonb_set:

# 更新已有data字段,将a键设为服务器事务时间
mymodel.data = func.jsonb_set(mymodel.data, '{a}', func.to_json(func.current_timestamp()))

方式二:在Python端生成时间并序列化

如果可以接受使用Python端的时间(而非数据库服务器事务时间),直接生成可JSON序列化的时间字符串即可:

from datetime import datetime

# 生成UTC时间的ISO格式字符串,可直接被JSON序列化
mymodel.data = {'a': datetime.utcnow().isoformat()}

原方法失败原因

text('CURRENT_TIMESTAMP')是SQLAlchemy用来表示原生SQL片段的对象,不属于Python原生的可JSON序列化类型。当你将其赋值给JSONB字段时,SQLAlchemy会尝试把整个字典序列化为JSON,而该对象无法被JSON编码器处理,因此抛出序列化错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:44:51