Вставка pyodbc.Binary данных (BLOB) в столбец образа SQL Server
Я пытаюсь вставить двоичные данные в столбецimage
тип данных в базе данных SQL Server. я знаюvarbinary(max)
является предпочтительным типом данных, но у меня нет прав на изменение схемы.
В любом случае, я читаю содержимое файла и помещаю его в pyodbc.Binary (), как показано ниже:
f = open('Test.ics', 'rb')
ablob = f.read().encode('hex')
ablob = pyodbc.Binary(ablob)
Когда яprint repr(ablob)
Я вижу правильное значениеbytearray(b'424547494e3a5 . . .
(многоточие добавлено).
Однако после вставки
insertSQL = """insert into documents(name, documentType, document, customerNumber) values(?,?,?,?)"""
cur.execute(insertSQL, 'test200.ics', 'text/calendar', pyodbc.Binary(ablob), 1717)
Значение столбца документа0x343234353 . . .
который выглядит так, как будто шестнадцатеричные данные были преобразованы в коды символов ASCII.
Я думал, что перенос значения в pyodbc.Binary () позаботится об этом? Любая помощь будет принята с благодарностью.
Я использую Python 2.7 и SQL Server 2008 R2 (10.50).
Edit:
Биргл любезно указал, что я без нужды вызывал кодирование («hex»), что привело к моей проблеме. Я полагаю, что это должно было привести данные в строку (хотя более полное объяснение было бы полезно).
Рабочий код:
ablob = pyodbc.Binary(f.read())
cur.execute(insertSQL, 'test200.ics', 'text/calendar', ablob, 1717)