Как преобразовать шестнадцатеричную строку в двоичную в Python для вставки с помощью cx_oracle - PullRequest
0 голосов
/ 17 января 2012

У меня есть текстовый файл, содержащий список 16-битных шестнадцатеричных чисел (например, '61C7393AA9B3474DB081C7B7CCE1C545'), и мне нужно вставить их в столбец Oracle RAW с помощью cx_Oracle. Я попробовал это:

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: недопустимое имя / номер переменной. Нужно ли преобразовывать значения в двоичные в python перед вызовом executemany? И если так, как? NB тот же sql прекрасно работает с cursor.execute и одним значением, просто со списком, у которого у меня проблемы.

1 Ответ

0 голосов
/ 17 января 2012

Ну, я решил это несколькими способами. Во-первых, приведенный выше код неверен, поскольку он создает список значений, тогда как он должен создавать список кортежей. т.е.

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)
...