无法将数据输入SQL DB

时间:2015-11-17 18:46:14

标签: python mysql sql

我正在尝试将值插入到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....。同样,有人知道我的安全假设是否正确吗?

1 个答案:

答案 0 :(得分:0)

我想当我们的图书馆比我们更聪明时会发生什么......

没有SQL服务器可以测试,但我认为0x值失败的原因是因为pymssql传递参数的方式导致服务器将其解释为十六进制字符串而'0x'之后的'q'不会符合0-9和AF字符的预期。

我没有足够的信息知道这是一个库错误和/或是否可以解决; pymssql文档不是很广泛,但我会尝试以下内容:

  • 如果可以,请在MSSQL Profiler中检查实际进入的命令
  • 以字符串形式构建您自己的命令并查看错误是否仍然存在(请记住Bobby Tables,然后将其投入生产中:https://xkcd.com/327/
  • 尝试通过添加引号等来解决此问题
  • 转换到另一个库/使用SQLAlchemy