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 mitSQL 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie zunächst sicher, dass Sie
with open(..)
die Datei zu Lesen (ein weiteres Beispiel). Dieser schließt sich automatisch die Datei-Objekten, wenn Sie erschöpft sind oder wird eine Ausnahme ausgelöst.Ich vermute, Sie werden immer die
0x343234353...
Daten durch betrachten der Ergebnisse im Management-Studio:Dies bedeutet nicht, dass die Daten gespeichert werden, auf diese Weise, es ist nur die Art, wie das Management Studio ist die
image
,text
,ntext
,varbinary
usw. Datentypen, die im Ergebnisbereich angezeigt.