sql >> Base de Datos >  >> RDS >> Sqlserver

Insertar datos pyodbc.Binary (BLOB) en la columna de imagen de SQL Server

Primero asegúrese de usar with open(..) para leer el archivo (otro ejemplo ). Esto cierra automáticamente los objetos de archivo cuando se agotan o se genera una excepción.

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

Supongo que obtienes el 0x343234353... datos mirando los resultados en Management Studio:

Esto no significa que los datos se almacenen de esta manera, es solo la forma en que Management Studio representa la image , text , ntext , varbinary , etc. tipos de datos en el panel de resultados.