使用python

时间:2016-02-19 17:13:56

标签: postgresql python-2.7 psycopg2

我想使用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的输入语法无效:"无"

2 个答案:

答案 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文档。