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)