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

Indsættelse af pyodbc.Binary data (BLOB) i SQL Server-billedkolonnen

Sørg først for, at du bruger with open(..) for at læse filen (et andet eksempel ). Dette lukker automatisk filobjekter, når de er udtømte eller en undtagelse er rejst.

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

Jeg gætter på, at du får 0x343234353... data ved at se resultaterne i Management Studio:

Dette betyder ikke, at dataene er gemt på denne måde, det er bare den måde, Management Studio repræsenterer image , text , ntext , varbinary , osv. datatyper i resultatruden.




  1. Når du kører UPDATE ... datetime =NU(); vil alle opdaterede rækker have samme dato/tid?

  2. Sådan løses:I migration, en rå forespørgsel efterfølger ad backslash escape i varchar, hvilket forårsager fejl under indsættelse af denne værdi i databasen

  3. Hvad hedder MySQL's SQL-specifikke programmeringssprog?

  4. Hvornår skal man bruge UNDTAGET i modsætning til IKKE FINDER i Transact SQL?