我想使用python psycopg2将null值插入postgres timestamp数据类型变量。
问题是其他数据类型(如char或int)采用None,而timestamp变量不识别None。
我尝试将Null,null作为字符串插入,因为我使用字典来附加insert语句的值。
以下是代码。
queryDictOrdered[column] = queryDictOrdered[column] if isNull(queryDictOrdered[column]) is False else NULL
,功能是
def isNull(key):
if str(key).lower() in ('null','n.a','none'):
return True
else:
False
我收到以下错误消息:
DataError:类型为timestamp的输入语法无效:" NULL"
DataError:类型为timestamp的输入语法无效:"无"
答案 0 :(得分:1)
Pandas数据帧中的空时间戳以NaT(不是时间)的形式出现,这与NULL不兼容。一种快速的解决方法是将其作为varchar发送,然后运行以下两个查询:
update <<schema.table_name>> set <<column_name>> = Null where
<<column_name>> = 'NULL';
或(取决于您将空值硬编码为什么)
update <<schema.table_name>> set <<column_name>> = Null where <<column_name>> = 'NaT';
最后运行:
alter table <<schema.table_name>>
alter COLUMN <<column_name>> TYPE timestamp USING <<column_name>>::timestamp without time zone;
答案 1 :(得分:0)
当然,您要在占位符周围添加引号。阅读有关将参数传递给查询的psycopg文档。