【问题标题】:The first argument to execute must be a string or unicode query要执行的第一个参数必须是字符串或 unicode 查询
【发布时间】:2013-09-12 23:13:14
【问题描述】:

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

【问题讨论】:

    标签: python blob pyodbc


    【解决方案1】:

    使用参数化插入:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2018-08-29
      • 1970-01-01
      相关资源
      最近更新 更多