我正在尝试使用 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/