pyodbc 在 MS SQL 服务器中使用二进制数据更新记录

pyodbc update record with binary data in MS SQL server

我正在尝试用二进制数据更新现有记录。

该列的 sql 服务器数据类型是 varbinary(MAX)

我使用的python代码:

result = bytes(result_string, 'utf-8')
cursor = self.connection.cursor()
date_updated = self.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute(f"UPDATE _nsInvoiceReconitionJob SET JobStatus = 2, DateUpdated = '{date_updated}', Result = '{result}' WHERE ID = '{job_id}'")
connection.commit()

结果如下:

File "/home/wessel/Work/crontest/Elvpy/JobProcessing.py", line 37, in save_result
    cursor.execute(f"UPDATE _nsInvoiceReconitionJob SET JobStatus = 2, DateUpdated = '{date_updated}', Result = '{result}' WHERE ID = '{job_id}'")
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server]Syntax error, permission violation, or other nonspecific error (0) (SQLExecDirectW)')

错误提到这可能是一个语法错误,并且查询在不更新“结果”列(二进制数据列)的情况下工作。这意味着错误必须是二进制数据,所以我在没有''的情况下尝试了它,但这也不起作用。 它也可能不是语法错误,意味着我只是做错了。如果有人能让我走上正确的道路,我将不胜感激!

我正在使用 pyodbc 版本 4.0.30, 我将 ODBC 驱动程序 17 用于 SQL 服务器

使用parameters!

result = bytes(result_string, 'utf-8')
cursor = self.connection.cursor()
date_updated = self.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute(
    "UPDATE _nsInvoiceReconitionJob SET JobStatus = ?, DateUpdated = ?, Result = ? WHERE ID = ?"
    , (2, date_updated, result, job_id)
    )
connection.commit()