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

时间:2013-09-09 12:51:39

标签: python blob pyodbc

我正在尝试使用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以字符串形式发送。我没有看到任何问题,但我错过了什么?

1 个答案:

答案 0 :(得分:2)

使用参数化插入:

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注入,并且如果使用不同的值多次执行插入操作,则更有效。样本使用here