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

使用PostgreSQL+SQLAlchemy+FastAPI提交模型时日期数据错误求助

问题分析与解决办法

核心问题:字段顺序不匹配

从报错信息能看出来,SQL插入语句里的字段顺序和数据库表实际的字段顺序对不上。虽然你写的INSERT语句里列的是(timestamp, key, value),但数据库里TimeMap表的实际字段顺序可能不是这个,导致本该传给key的字符串被塞到了timestamp字段的位置,直接触发了"invalid input syntax for type timestamp: 'string'"的错误。

看报错里的SQL行:...-28T17:30:38.463000+00:00'::timestamptz, 'string', 'string'),箭头指向的是第二个参数,而错误提示说timestamp的输入是"string",这说明第二个参数被当成了timestamp字段的值,明显是顺序错了。

解决步骤

  • 先核对数据库表的实际字段顺序
    执行这条SQL查一下:

    SELECT column_name FROM information_schema.columns WHERE table_name = 'TimeMap' ORDER BY ordinal_position;
    

    看看结果里的字段顺序是不是和你模型定义的timestamp, key, value一致。

  • 用关键字参数绑定插入值
    不管表结构顺序如何,用SQLAlchemy插入时都别依赖位置参数,直接用关键字指定每个字段对应的值,这样就不会因为顺序错出问题:

    from sqlalchemy import insert
    
    stmt = insert(TimeMap).values(
        timestamp=datetime.datetime(2023, 4, 28, 17, 30, 38, 463000, tzinfo=datetime.timezone.utc),
        key='string',
        value='string'
    )
    
  • 顺便修复模型里的小问题
    你模型里value字段是String类型,但默认值设成了False(布尔值),这会导致默认存的是字符串"False",如果不是你想要的,要么把默认值改成字符串:

    value = Column(String, default="False")
    

    要么直接把字段类型改成Boolean:

    value = Column(Boolean, default=False)
    

额外排查方向

  • 检查Alembic这类迁移工具生成的脚本,有没有因为迁移错误导致表结构和模型定义不一致。
  • 再确认下FastAPI的Pydantic请求模型,是不是真的把输入正确转换成了datetime类型(虽然你说已经确认,但多查一遍没坏处)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:33:18