我正在尝试将二进制数据插入SQL Server数据库中数据类型为image
的列中。我知道varbinary(max)
是首选数据类型,但我无权更改架构。
无论如何,我正在读取文件的内容并将其包装为pyodbc.Binary(),如下所示:
f = open('Test.ics', 'rb')
ablob = f.read().encode('hex')
ablob = pyodbc.Binary(ablob)
当我print repr(ablob)
看到正确的值bytearray(b'424547494e3a5 . . .
(添加省略号)。
但是,在插入
insertSQL = """insert into documents(name, documentType, document, customerNumber) values(?,?,?,?)"""
cur.execute(insertSQL, 'test200.ics', 'text/calendar', pyodbc.Binary(ablob), 1717)
document列的值是0x343234353 . . .
,看起来就像十六进制数据被转换为ASCII字符代码一样。
我想用pyodbc.Binary()包装这个值可以解决这个问题?任何帮助都将不胜感激。
我正在使用Python2.7和SQL Server 2008 R2(10.50)。
编辑:
比格尔善意地指出,我不必要地调用encode('hex'),这导致了我的问题。我相信这一定是将数据强制转换为字符串(尽管更全面的解释会有帮助)。
工作代码:
ablob = pyodbc.Binary(f.read())
cur.execute(insertSQL, 'test200.ics', 'text/calendar', ablob, 1717)
首先确保使用^{} 读取文件(another example)。这会在文件对象耗尽或时自动关闭,并引发异常。
我猜您是通过查看Management Studio中的结果来获取
0x343234353...
数据的:这并不意味着数据以这种方式存储,它只是Management Studio在结果窗格中表示
image
、text
、ntext
、varbinary
等数据类型的方式。相关问题 更多 >
编程相关推荐