2016-04-18 8 views
0

pythonコードのNone値を持つテーブルのTIMESTAMP列を更新しようとしています。python cx_Oracleがヌルタイムスタンプ値を更新できません

null値のinsert文を使用すると完全に機能しました。

しかし、更新文を使用するとうまくいかない!!

以下は、ご理解のためのテストコードです。

(私が '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:一貫性のないデータ型:予想は - 私はcx_Oracleが数(0 ??) としてPythonでなし価値を認識だと思うNUMBER

を持って、それが'YYYYMMDDHH24MISS'に変換することはできません文字列型。

TIMESTAMP列にNULL値を更新する方法はありますか?

答えて

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 

cx_Oracleはタイムスタンプ値を直接バインドできるため(datetime.datetimeを使用)、to Oimをバインドする場合はto_timestamp()を使用してデータを変換する必要はありません。 cleはあなたに暗黙のうちに変換します。

関連する問題