【发布时间】:2020-10-10 08:53:01
【问题描述】:
我尝试使用 pyodbc 将腌制的 numpy 数组作为 VARBINARY(MAX) 对象存储在 SQL Server 中。 SQL Server 的 INSERT 语句如下所示:
INSERT INTO [dbo].[Images]
([UserId]
,[FileName]
,[FeaturesVector])
VALUES
(<UserId, int,>
,<FileName, nchar(100),>
,<FeaturesVector, varbinary(max),>)
在我的 python 代码中,我将查询构建为 fstring:
query = f"INSERT INTO Images(UserID, FileName, FeaturesVector) \
VALUES ('{user_id}', '{file_name}', '{features_vector}')"
当我尝试将对象插入数据库时:
features_vector = np.arange(1)
features_vector.astype('float32')
features_vector = pickle.dumps(features_vector)
query = f"INSERT INTO Images(UserID, FileName, FeaturesVector) \
VALUES ('{user_id}', '{file_name}', '{features_vector}')"
cnxn.execute(query)
cnxn.commit()
我得到一个错误:
('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'\' 附近的语法不正确。(102) (SQLExecDirectW)")
【问题讨论】:
-
不要注入,参数化。同样,您的反斜杠(
\)似乎被解释为文字,而不是转义字符。 -
我删除了反斜杠,仍然不起作用。你能解释一下如何不注入参数化吗?
-
您不需要在查询中转义 \。您似乎打算使用它将 python 字符串分成两行,而不是 SQL 查询本身。
标签: python sql-server