python 使用psycopg 2在Postgres中为空时为日期/或时间插入NULL

yc0p9oo0  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(233)

我在Postgres的日期/时间字段中插入从文件读取的记录。文件中的许多日期/或时间字段为空。我想为相应的表字段插入null。日期/或时间的Postgres表col分别定义为日期/或时间。使用如下查询。我收到错误:psycopg2.errors.InvalidDatetimeFormat:类型日期输入语法无效:”“任何关于问题所在的指示都是有帮助的。谢谢
"""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(%s,'')::date, %s, %s, %s, %s, %s, %s, %s, NULLIF(%s,'')::date, %s, %s,NULLIF(%s,'')::time, NULLIF(%s,'')::date, %s)
希望将没有日期/时间列值的记录插入到空表中。

nimxete2

nimxete21#

你在这里传递“STRING”作为日期时间字段的值。
要在此字段中插入“NULL”,可以使用“NULLIF()”函数(example here)。此函数将把空字符串转换为NULL。现在,您需要将其转换为“日期-时间”类型,为此,您可以使用“to_date()”函数或只是类型转换它。
此查询可能会有所帮助:

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(%s,'')::date,%s,%s,%s,%s,%s,%s,
      %s,NULLIF(%s,'')::date,%s,%s,NULLIF(%s,'')::time,NULLIF(%s,'')::date,
      CASE WHEN NULLIF(%s, '') = '' THEN NULL ELSE to_date(%s, 'YYYY-MM-DD') END
)
  • 您可能需要使用to_timestamp()函数将字符串转换为特定时间格式 *

相关问题