[英]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.