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

使用psycopg2向PostgreSQL插入数据时,空日期/时间设为NULL报错

问题排查与解决:PostgreSQL日期/时间字段插入NULL失败

问题原因

错误提示里的输入是" "(多个空格),你当前用的NULLIF(%s,'')仅会把空字符串转为NULL,但对于包含空格的字符串,这个函数不会触发转换。PostgreSQL尝试把空格字符串强制转为date/time类型,因此抛出格式错误。

解决方案

修改INSERT语句中的NULLIF逻辑,先去除输入字符串的首尾空格,再判断是否为空:

INSERT INTO userbasic
(name, create_date, owner_id, adsp, special,
 oper, revoke, grpacc, pwd_interval, pwd_date,
 programmer, defgrp_id, lastjob_time, lastjob_date, install_data)
VALUES 
(%s, NULLIF(TRIM(%s), '')::date, %s, %s, %s, 
%s, %s, %s, %s, NULLIF(TRIM(%s), '')::date, 
%s, %s,NULLIF(TRIM(%s), '')::time, NULLIF(TRIM(%s), '')::date, %s)

特殊情况处理

如果文件中的空值还可能包含制表符、换行符等其他空白字符,可以用正则替换清除所有空白内容:

NULLIF(REGEXP_REPLACE(%s, '^\s+$', '', 'g'), '')::date

这种写法能把任意空白字符组合转换成空字符串,再通过NULLIF转为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:22:07