使用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
相关产品推荐
相关产品推荐

