我正在尝试使用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 :(得分: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。