2012-01-16 6 views
0

16ビットの16進数のリスト(たとえば、 '61C7393AA9B3474DB081C7B7CCE1C545')を含むテキストファイルがあり、cx_Oracleを使用してOracle RAW列を挿入する必要があります。 私はこの試みた:cx_oracleを使用して16進数文字列をPythonでバイナリに変換する方法

sql = "INSERT INTO GUIDS VALUES (HEXTORAW(:1))" 
ids = [l.strip() for l in guidfile.readlines()] 
cursor.bindarraysize = len(ids) 
cursor.setinputsizes(cx_Oracle.BINARY) 
cursor.executemany(sql, ids) 

をそれはcx_Oracle.DatabaseErrorで失敗:ORA-01036:不正な変数名/番号。 executemanyを呼び出す前に、値をバイナリに変換する必要がありますか?そしてもしそうなら、どのように?注意:同じsqlはcursor.executeと単一の値でうまく動作しますが、リストには問題があります。

答えて

0

さて、私はそれをいくつかの方法で解決しました。まず、値のリストを作成する一方、タプルのリストを作成する必要があるため、上記のコードは正しくありません。すなわち

ids = [(l.strip(),) for l in guidfile.readlines()] 

し、それが動作する

cursor.setinputsizes(cx_Oracle.STRING) 

を使用。 元の質問 - どのようにhextorawを取り除くために、私はこれが動作することがわかった:

import base64 
ids = [(base64.b16decode(l.strip()),) for l in guidfile.readlines()] 
cursor.setinputsizes(cx_Oracle.BINARY) 
関連する問題