我正在尝试将值插入到SQL DB中,我从字典中提取数据。当程序试图将0xqb_QWQDrabGr7FTBREfhCLMZLw4ztx
输入名为VersionId的列时,我遇到了问题。以下是我的示例代码和错误。
cursor.execute("""insert into [TestDB].[dbo].[S3_Files] ([Key],[IsLatest],[LastModified],[Size(Bytes)],[VersionID]) values (%s,%s,%s,%s,%s)""",(item['Key'],item['IsLatest'],item['LastModified'],item['Size'],item['VersionId']))
conn_db.commit()
pymssql.ProgrammingError: (102, "Incorrect syntax near 'qb_QWQDrabGr7FTBREfhCLMZLw4ztx'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")
基于错误,我假设SQL因为安全问题而不喜欢VersionId字符串开头的0x
。如果我的假设是正确的,我有什么选择?我也无法更改VersionId的值。
编辑:这是我打印光标命令时得到的结果
insert into [TestDB].[dbo].[S3_Files] ([Key],[IsLatest],[LastModified],[Size(Bytes)],[VersionID]) values (Docs/F1/Trades/Buy/Person1/Seller_Provided_-_Raw_Data/GTF/PDF/GTF's_v2/NID3154229_23351201.pdf,True,2015-07-22 22:05:38+00:00,753854,0xqb_QWQDrabGr7FTBREfhCLMZLw4ztx)
编辑2:奇怪的是,当我尝试在SQL管理工作室上手动输入插入命令时,它不喜欢第一个参数中路径名中的('),所以我转义了字符,添加了(')除了数字和命令之外的每个值。在这一点上,我非常难以理解为什么插入不起作用。
编辑3:我决定尝试一下,除了每个插件,我发现被捕获的VersionIds具有模式0x....
。同样,有人知道我的安全假设是否正确吗?
答案 0 :(得分:0)
我想当我们的图书馆比我们更聪明时会发生什么......
没有SQL服务器可以测试,但我认为0x值失败的原因是因为pymssql传递参数的方式导致服务器将其解释为十六进制字符串而'0x'之后的'q'不会符合0-9和AF字符的预期。
我没有足够的信息知道这是一个库错误和/或是否可以解决; pymssql文档不是很广泛,但我会尝试以下内容: