繁体   English   中英

python cx_Oracle无法更新空时间戳值

[英]python cx_Oracle fail to update null timestamp value

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

当使用带有空值的插入语句时,它可以完美地工作。

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

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

(之所以更新“ None”值,是因为新值来自另一个数据库,并且我想用新的数据库来更新值,而某些值是NULL。)

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

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值?

就在这里。 除非另外指定,否则将空值绑定为字符串类型。 但是,您可以使用以下代码来覆盖它:

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),并且如果您绑定None,Oracle将为您隐式转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM