Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Inserimento di dati pyodbc.Binary (BLOB) nella colonna dell'immagine di SQL Server

Per prima cosa assicurati di utilizzare with open(..) per leggere il file (un altro esempio ). Questo chiude automaticamente gli oggetti file quando sono esauriti o viene sollevata un'eccezione.

# 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)

Immagino che tu stia ricevendo il 0x343234353... dati guardando i risultati in Management Studio:

Ciò non significa che i dati siano archiviati in questo modo, è solo il modo in cui Management Studio rappresenta image , text , ntext , varbinary , ecc. tipi di dati nel riquadro dei risultati.