使用 Python pyodbc 将数据插入 MS SQL Server 时出错[错误 42000]


fo = open("C:Program FilesNPKIyessignUserSignCert.der","rb")
sssd = fo.read()
std = "SignCert.der"
cursor.execute("SELECT * FROM NPKIInf WHERE nSeqNum=5")
cursor.execute("insert into NPKIInf(nSeqNum, nFileName, nBinary) values ('7', '" + std + "', '" + sssd +"')")
cnxn.commit()

上面是代码,错误消息如下:

C:Python27>python import.py
Traceback (most recent call last):
  File "import.py", line 12, in <module>
    cursor.execute("insert into NPKIInf(nSeqNum,nFileName,nBinary) values('7', '" + std + "', '" + sssd +"')")
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][
SQL Server]xb9xaexc0xdaxbfxad '0???x8dxa0x03x02x01x02x02x04x14xe
0xd2?rx06t*x86Hx86xf7rx01x01x0bx05'xc0xc7 xb5xfbxbfxc8xc7xa5
xb0xa1 xc2xa6xc0xcc xb8xc2xc1xf6 xbexcaxbdxc0xb4xcfxb4xd9. (10
5) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]'0??
?x8dxa0x03x02x01x02x02x04x14xe0xd2?rx06t*x86Hx86xf7rx01x01x
0bx05' xb1xd9xc3xb3xc0xc7 xb1xb8xb9xaexc0xcc xc0xdfxb8xf8xb5x
c7xbexfaxbdxc0xb4xcfxb4xd9. (102)")

与数据库的连接很好,我也尝试插入硬数据,例如

cursor.execute("insert into NPKIInf(nSeqNum,nFileName,nBinary) values('7','test','test'")

仍然不起作用。

这是数据库表的信息:

 CREATE TABLE [dbo].[NPKIInf](
           [nSeqNum] [smallint] NOT NULL,
           [nFileName] [nchar](50) NULL,
           [nBinary] [varbinary](max) NULL,
           [nHspName] [nchar](50) NULL,
CONSTRAINT [PK_NPKIInf] PRIMARY KEY CLUSTERED
(
           [nSeqNum] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我做错了什么?提前谢谢。

当我在SQL Server上运行以下命令时,您似乎没有转换为正确的数据类型:

insert into NPKIInf(nSeqNum,nFileName,nBinary) values('8','test', 'test')

它失败了,当我运行时:

insert into NPKIInf(nSeqNum,nFileName,nBinary) values('8','test', cast('test' as varbinary))

就您的实际查询而言,请查看:插入 pyodbc。二进制数据 (BLOB) 到 SQL Server 映像列中

它应该回答你的问题

错误消息显示您的(单)引号未配对。

[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]문자열 '0???뜝詵? *낷놑 u000b'의 따옴표가 짝이 맞지 않습니다.(105) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]'0???뜝詵? *낷놑 u000b' 근처의 구문이 잘못되었습니다.(102)

您的 sssd 中必须至少有一个引号,这会损坏直接构建的查询句子。

相关内容

最新更新