Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Einfügen von pyodbc.Binary-Daten (BLOB) in die Image-Spalte von SQL Server

Stellen Sie zunächst sicher, dass Sie with open(..) um die Datei zu lesen (ein weiteres Beispiel ). Dadurch werden Dateiobjekte automatisch geschlossen, wenn sie erschöpft sind oder eine Ausnahme wird ausgelöst.

# common vars
connection = pyodbc.connect(...)
filename = 'Test.ics'
insert = 'insert into documents (name, documentType, document, customerNumber)'

# without hex encode
with open(filename, 'rb'):
    bindata = f.read()

# with hex encode
with open(filename, 'rb'):
    hexdata = f.read().encode('hex')

# build parameters
binparams = ('test200.ics', 'text/calendar', pyodbc.Binary(bindata), 1717)
hexparams = ('test200.ics', 'text/calendar', pyodbc.Binary(hexdata), 1717)

# insert binary
connection.cursor().execute(insert, binparams)
connection.commit()

# insert hex
connection.cursor().execute(insert, hexparams)
connection.commit()

# print documents
rows = connection.cursor().execute('select * from documents').fetchall()
for row in rows:
    try:
        # this will decode hex data we inserted
        print str(row.document).decode('hex')
    # attempting to hex decode binary data throws TypeError
    except TypeError:
        print str(row.document)

Ich vermute, Sie erhalten 0x343234353... Daten, indem Sie sich die Ergebnisse in Management Studio ansehen:

Das bedeutet nicht, dass die Daten auf diese Weise gespeichert werden, es ist lediglich die Art und Weise, wie Management Studio image darstellt , text , ntext , varbinary , usw. Datentypen im Ergebnisbereich.