我正在尝试使用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)')
请一位有人帮助我。谢谢
答案 0 :(得分:1)
您的参数必须作为一个序列传递,而不是作为两个单独的参数传递。一个元组在这里会做得很好:
cursor.execute(
"insert into Database1([image name], image) values (?,?)",
('new1', pyodbc.Binary(bindata)))
请注意,您还需要正确引用image name
列,并将数据包装在pyodbc.Binary()
对象中;这将为您的Python版本生成正确的数据类型(bytearray
或bytes
)。