python cx_Oracle无法更新null时间戳值

时间:2016-04-18 06:47:53

标签: python oracle null timestamp updates

我正在尝试使用TIMESTAMP代码中的无值更新表格中的python列。

使用带有空值的insert语句时,它非常有效。

但是当使用update语句时,它不起作用!!

以下是您的理解的测试代码。

(我更新'None'值的原因是新值来自其他数据库,我想用新值更新值,并且某些值为NULL。)

:1是python代码中的'20160418154000'类型字符串 但当它为'无'时,它会引发异常。

INSERT INTO TEST_TABLE (ARR_TIME) VALUES(TO_TIMESTAMP(:1, 'YYYYMMDDHH24MISS'))

效果很好!!

UPDATE TEST_TABLE SET ARR_TIME = TO_TIMESTAMP(:1, 'YYYYMMDDHH24MISS')

它不起作用!!

  

错误消息:ORA-00932:不一致的数据类型:预期 - 得到NUMBER

我认为cx_Oracle将python中的None值识别为数字(0 ??) 并且它无法转换为'YYYYMMDDHH24MISS'字符串类型。

有没有办法在TIMESTAMP列中更新NULL值?

1 个答案:

答案 0 :(得分:1)

是的,有。除非另行指定,否则将null绑定为类型字符串。但是,您可以使用以下代码覆盖它:

cursor.setinputsizes(cx_Oracle.TIMESTAMP)

请参阅此处获取文档:

http://cx-oracle.readthedocs.org/en/latest/cursor.html#Cursor.setinputsizes

注意:您也可以使用此代码解决此问题:

update test_table set arr_time = :1

无需使用to_timestamp()转换数据,因为cx_Oracle可以直接绑定时间戳值(使用datetime.datetime),如果绑定无,Oracle将隐式转换为您。