Einfügen von pyodbc.Binäre Daten (BLOB) in der SQL Server-image-Spalte

Ich versuche, einfügen von binären Daten in einer Spalte von image Datentyp in einer SQL Server-Datenbank. Ich weiß varbinary(max) ist der bevorzugte Datentyp, aber ich habe nicht die Rechte zum ändern der schema.

Jedenfalls, ich lese den Inhalt einer Datei und wickelte Sie in pyodbc.Binary() wie folgt:

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

Wenn ich print repr(ablob) ich sehe den richtigen Wert bytearray(b'424547494e3a5 . . . (Auslassungszeichen Hinzugefügt.)

Jedoch nach dem einfügen

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

Den Wert der Spalte Dokument ist 0x343234353 . . . die scheint, als ob die Hex-Daten umgewandelt wurde, um den ASCII-Zeichen.

Dachte ich, das einwickeln der Wert in pyodbc.Binary() würde sich darum kümmern? Jegliche Hilfe würde sehr geschätzt werden.

Ich bin mit Python 2.7 und SQL Server 2008 R2 (10.50).

Bearbeiten:

beargle freundlich darauf hingewiesen, dass ich unnötig Aufruf von encode('hex'), das führte zu meinem Problem. Ich glaube, das müssen schon die Nötigung, die Daten in ein string (obwohl eine ausführlichere Erklärung wäre hilfreich).

Arbeiten code:

ablob = pyodbc.Binary(f.read())
cur.execute(insertSQL, 'test200.ics', 'text/calendar', ablob, 1717)
  • Ich bin mit der SQL Server Native Client 10.0 Fahrer und habe auch getestet mit SQL Server Treiber mit dem gleichen Ergebnis.
  • Warum müssen Sie zu hex Kodieren den Inhalt vor Verpackung mit pyodbc.Binary?
  • Guter Punkt, ich brauche das nicht zu, und entfernen führt zum erwarteten Ergebnis. Danke!
  • Gut zu hören. Ich habe diese arbeiten mit dem hex-codieren, man muss Sie nur zu entschlüsseln, wählen Sie Ergebnisse.
InformationsquelleAutor slachterman | 2012-08-06
Schreibe einen Kommentar