无法通过pyodbc将图像上传到MS Sql server

时间:2014-06-28 18:19:04

标签: python sql-server image upload

我正在尝试使用python语言将图像上传到Linux(raspbian)环境中的MS SQL Web服务器。到目前为止,我已经能够连接到MS Sql,我也创建了一个表。我正在使用pyodbc。

#! /user/bin/env python
import pyodbc 

dsn = 'nicedcn'
user = myid
password = mypass
database = myDB

con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database)
cnxn = pyodbc.connect(con_string)
cursor = cnxn.cursor()

string = "CREATE TABLE Database1([image name] varchar(20), [image] varbinary(max))"
cursor.execute(string)
cnxn.commit()

这部分没有任何错误。那意味着我已经成功创建了一个表不是?或者有什么问题吗?

我尝试以这种方式上传图片。

with open('new1.jpg','rb') as f:
            bindata = f.read()
cursor.execute("insert into Database1(image name, image) values (?,?)", 'new1', bindata)
cnxn.commit()

我在这部分得到了错误。并且它pyodbc.ProgrammingError:('42000','[42000] [FreeTDS] [SQL Server] Satement(s)无法准备。(8180)(SQLParamData)')

请一位有人帮助我。谢谢

1 个答案:

答案 0 :(得分:1)

您的参数必须作为一个序列传递,而不是作为两个单独的参数传递。一个元组在这里会做得很好:

cursor.execute(
    "insert into Database1([image name], image) values (?,?)",
    ('new1', pyodbc.Binary(bindata)))

请注意,您还需要正确引用image name列,并将数据包装在pyodbc.Binary()对象中;这将为您的Python版本生成正确的数据类型(bytearraybytes)。