Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вмъкване на pyodbc.Binary данни (BLOB) в колона с изображение на SQL Server

Първо се уверете, че използвате with open(..) за да прочетете файла (друг пример ). Това автоматично затваря файловите обекти, когато са изчерпани или възниква изключение.

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

Предполагам, че получавате 0x343234353... данни, като прегледате резултатите в Management Studio:

Това не означава, че данните се съхраняват по този начин, това е просто начинът, по който Management Studio представя image , text , ntext , varbinary и т.н. типове данни в панела с резултати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обектът не можа да бъде пуснат, защото е препратен от ограничение ВЪНШЕН КЛЮЧ - SQL Server / TSQL Урок, част 74

  2. SQL Server 2008 е инсталиран, въпреки че работещата версия все още е 2005

  3. DevOps:DBA или разработчик – Получаване на правилния баланс

  4. Какво е @@SERVICENAME в SQL Server?

  5. SQL GUID срещу цяло число