5

我正在尝试使用 pyodbc 将 blob 数据上传到 ms-sql db。我得到“第一个要执行的参数必须是字符串或 unicode 查询”错误。

代码是

file = pyodbc.Binary(open("some_pdf_file.pdf", "r").read())

cur.execute("INSERT INTO BlobDataForPDF(ObjectID, FileData, Extension) VALUES ('1', " + file + ", '.PDF')")
cur.commit()

第一个参数 ObjectID 作为字符串发送。我没有看到任何问题,但我错过了什么吗?

4

1 回答 1

6

使用参数化插入:

file = pyodbc.Binary(open("some_pdf_file.pdf", "r").read())
sql = "insert into BlobDataForPDF(ObjectID, FileData, Extension) values (?, ?, ?)"
cur.execute(sql, ('1', file, '.PDF'))
cur.commit()

当前代码正在尝试将二进制数据与您的插入字符串连接起来。使用参数将您的 SQL 字符串与插入的值隔离开来,防止 SQL 注入,如果您使用不同的值多次执行插入,效率会更高。示例用法在这里

于 2013-09-09T13:43:25.960 回答