python - 要执行的第一个参数必须是字符串或 unicode 查询

标签 python blob pyodbc

我正在尝试使用 pyodbc 将 blob 数据上传到 ms-sql 数据库。我收到“要执行的第一个参数必须是字符串或 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 以字符串形式发送。我没有发现任何问题,但我是否遗漏了什么?

最佳答案

使用参数化插入:

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 注入(inject),并且如果使用不同的值多次执行插入,效率会更高。使用示例here .

关于python - 要执行的第一个参数必须是字符串或 unicode 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698664/

相关文章:

python - django objects.all() 与 objects.filter()

python - 更新 INI 文件而不删除注释

java - 无法写入 JSON : Unable to access lob stream

python - 参数为 : [ODBC Microsoft Access Driver] Too few parameters. 的 PypyODBC 预期为 4

python - 64 位 pyodbc 是否可以与 32 位 MS Access 数据库通信?

Python 元组解包

python - HomeBrew 搞砸了 Python 安装

image - 如何在 svg 图像中使用数据 blob

java - 从 Mysql DB 读取图像并将其再次发送到 Java 中的 DB

python - Dataframe将数据类型写入txt文件