Python 无法将数据输入SQL数据库

Python 无法将数据输入SQL数据库,python,mysql,sql,Python,Mysql,Sql,我试图将值插入到SQL数据库中,从字典中提取数据。当我的程序试图将0xqb_QWQDrabGr7FTBREfhCLMZLw4ztx输入名为VersionId的列时,我遇到了一个问题。下面是我的示例代码和错误 cursor.execute("""insert into [TestDB].[dbo].[S3_Files] ([Key],[IsLatest],[LastModified],[Size(Bytes)],[VersionID]) values (%s,%s,%s,%s,%s)""",(it

我试图将值插入到SQL数据库中,从字典中提取数据。当我的程序试图将
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的值

编辑:这是我打印光标命令时得到的结果
插入[TestDB].[dbo].[S3_文件]([Key]、[IsLatest]、[LastModified]、[Size(Bytes)]、[VersionID])值(Docs/F1/Trades/Buy/Person1/Seller_提供的原始数据/GTF/PDF/GTF's_v2/NID3154229_23351201.PDF,True,2015-07-22:05:38+00:00753854,0xb_qwqdrabgr7ftbrefhclmzlw4ztxtx)

编辑2:奇怪的是,当我尝试在SQL management studio上手动输入insert命令时,它不喜欢第一个参数中路径名中的('),因此我对字符进行了转义,在每个值中添加('),除了数字和命令有效外。在这一点上,我很困惑为什么插入不起作用


编辑3:我决定做一次尝试,除了在每个插入上,我看到被捕获的versionID具有模式
0x..
。再说一次,有人知道我对安全性的假设是否正确吗?

我想,当我们的图书馆试图比我们更聪明时,就会发生这种情况

没有SQL server可供测试,但我假设0x值失败的原因是因为pymssql传递参数的方式导致服务器将其解释为十六进制字符串,“0x”后面的“q”不符合其预期的0-9和a-F字符

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

  • 如果可以,请在MSSQL事件探查器中检查实际输入的命令
  • 将您自己的命令构建为字符串,并查看错误是否仍然存在(但在将其投入生产之前,请记住Bobby Tables:)
  • 试着通过添加引号等来解决这个问题
  • 切换到另一个库/使用SQLAlchemy

您应该先尝试创建字符串变量strSQL,然后再创建
cursor.execute(strSQL)
,这样您就可以调试strSQL内部的内容。您可以使用SQL语句并在phpAdmin或类似的程序中运行它,看看它是否有效吗?@Drewdin我必须相应地更改命令才能在PHP上工作,我使用site demo.phpmyadmin.net尝试将它插入temp(KeyHolder,IsLatest,lastdomative,Size,VersionID)值('pmtg-dox/CCM/Trades/Buy/BLT_1507_01/Seller_提供的原始数据/BPO/PDF/BLT_BPO's_v2/NID3154229_23351201_BPO.PDF',True',2015-07-22:05:38+00:00',753854',0xqdb-qrabgr7ftfhzt4fhx'这个命令起作用了。我所要做的是修正括号,并在第一个值和最后一个值中添加。