我正在尝试使用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值?
答案 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将隐式转换为您。