Wstawianie danych pyodbc.Binary (BLOB) do kolumny obrazu SQL Server

Próbuję wstawić dane binarne do kolumnyimage typ danych w bazie danych SQL Server. wiemvarbinary(max) jest preferowanym typem danych, ale nie mam uprawnień do zmiany schematu.

W każdym razie czytam zawartość pliku i zawijam go w pyodbc.Binary () jak poniżej:

f = open('Test.ics', 'rb')
ablob = f.read().encode('hex')
ablob = pyodbc.Binary(ablob)

Kiedy japrint repr(ablob) Widzę poprawną wartośćbytearray(b'424547494e3a5 . . . (dodano elipsę).

Jednak po włożeniu

insertSQL = """insert into documents(name, documentType, document, customerNumber) values(?,?,?,?)"""
cur.execute(insertSQL, 'test200.ics', 'text/calendar', pyodbc.Binary(ablob), 1717)

Wartość kolumny dokumentu to0x343234353 . . . który wygląda tak, jakby dane szesnastkowe zostały przekształcone na kody znaków ASCII.

Pomyślałem, że zawijanie wartości w pyodbc.Binary () zajmie się tym? Każda pomoc byłaby bardzo mile widziana.

Korzystam z Pythona 2.7 i SQL Server 2008 R2 (10.50).

Edytować:

beargle uprzejmie wskazał, że niepotrzebnie dzwoniłem na kodowanie („hex”), co prowadziło do mojego problemu. Uważam, że musiało to wymusić dane w łańcuchu (choć pomocne byłoby pełniejsze wyjaśnienie).

Kod roboczy:

ablob = pyodbc.Binary(f.read())
cur.execute(insertSQL, 'test200.ics', 'text/calendar', ablob, 1717)

questionAnswers(1)

yourAnswerToTheQuestion