Python 在MS SQL server中使用二进制数据的pyodbc更新记录

Python 在MS SQL server中使用二进制数据的pyodbc更新记录,python,sql-server,pyodbc,Python,Sql Server,Pyodbc,我正在尝试用二进制数据更新现有记录 列的sql server数据类型为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 _nsInvoic

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

列的sql server数据类型为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)')
该错误提到这可能是一个语法错误,查询在不更新“Result”列(即二进制数据列)的情况下工作。这意味着错误必须是二进制数据,所以我在没有“”的情况下尝试了它,但这也不起作用。 这也不可能是语法错误,这意味着我只是做错了。如果有人能让我走上正确的道路,我将不胜感激

我使用的是pyodbc版本4.0.30, 我将ODBC驱动程序17用于SQL Server

使用

result=bytes(结果字符串'utf-8')
cursor=self.connection.cursor()
date\u updated=self.datetime.now().strftime(“%Y-%m-%d%H:%m:%S”)
cursor.execute(
“更新_nsInvoicereConitionJobSet JobStatus=?,DateUpdated=?,Result=?其中ID=?”
,(2,更新日期、结果、作业id)
)
commit()连接

SQL注入!使用参数。请参阅。在这种情况下,SQL注入没有风险,因为有0个用户输入,但我将对此进行研究:)是的,但正如您所注意到的,使用f字符串需要正确引用值,而在给定varbinary数据的情况下,这显然是无法做到的。