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

发布于 2021-01-29 16:42:03

我正在尝试使用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作为字符串发送。我没发现任何问题,但我有什么遗漏吗?

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用参数化插入:

    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注入,并且如果您多次使用不同的值执行插入操作,则效率更高。示例用法在这里



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看