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

0 投票
1 回答
2062 浏览
提问于 2025-04-18 11:26

我正在尝试在Linux(Raspbian)环境下使用Python语言将一张图片上传到MS SQL网络服务器。目前我已经成功连接到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] 语句无法准备。 (8180) (SQLParamData)')

有人能帮帮我吗?谢谢!

1 个回答

1

你的参数必须作为一个序列传入,而不是分成两个单独的参数。这里可以使用一个元组来实现:

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

注意,你还需要正确地引用image name这一列,并将数据包裹在pyodbc.Binary()对象中;这样做会生成适合你Python版本的数据类型(bytearraybytes)。

撰写回答