2012-01-16 4 views
0

16 비트 16 진수 목록 (예 : '61C7393AA9B3474DB081C7B7CCE1C545')이 포함 된 텍스트 파일을 가지고 있으며 cx_Oracle을 사용하여 Oracle RAW 열을 삽입해야합니다. 나는이 시도 :cx_oracle을 사용하여 16 진수 문자열을 파이썬에서 바이너리로 변환하는 방법

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를 호출하기 전에 값을 파이썬에서 바이너리로 변환해야합니까? 그리고 만약 그렇다면 어떻게? NB 동일한 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) 
관련 문제