无法通过pyodbc插入长度超过257个字符的文本字段的记录

时间:2013-08-14 05:56:23

标签: pyodbc sql-server-native-client

我有一台SQL服务器版本是10.50.4000。我通过pyodbc使用SQL Server Native Client 11.0驱动程序从linux连接到它。 这是表格定义。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [ctm].[services](
    [id] [char](36) NOT NULL,
    [Name] [varchar](45) NOT NULL,
    [ServiceDescription] [varchar](256) NULL,
    [Version] [varchar](45) NULL,
    [Status] [varchar](45) NOT NULL,
    [StatusDescription] [varchar](256) NULL,
    [WSDL] [text] NULL,
    [WADL] [text] NULL,
    [XSD] [text] NULL,
    [CreatedBy] [varchar](100) NULL,
    [CreatedOn] [datetime] NOT NULL,
    [CreatedAt] [varchar](45) NULL,
    [UpdatedBy] [varchar](100) NULL,
    [UpdatedOn] [datetime] NULL,
    [UpdatedAt] [varchar](45) NULL,
    [deleted] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

字段“WSDL”用于保留Web服务的架构。我已经阅读了模式文件并将其存储到字符串中。但是当我尝试将记录插入数据库服务器时,我收到了以下错误消息:

  

追踪(最近一次通话):    文件“”,第1行,in   pyodbc.DataError:('22001','[22001] [Microsoft] [SQL Server Native Client 11.0]字符串数据,右截断(0)(SQLExecDirectW)')

这是我执行的命令:

  
    
      

cursor.execute(“”“插入到ctm.services(id,Name,ServiceDescription,Version,Status,StatusDescription,WSDL,WADL,XSD,CreatedBy,CreatedOn,CreatedAt,UpdatedBy,UpdatedOn,UpdatedAt,deleted)值( ?,?,?,?,?,?,?,?,?,?,current_timestamp,?,null,null,null,?)“”“,'abcdefghijklmn','whatservice','testing','1.0 .0','active','','注意!!!这应该是一个模式文件上下文。但由于某种原因无法显示。所以我在这里输入垃圾信息','null','null', getpass.getuser(),socket.gethostname(),'0')

    
  

当WSDL的字符串大小小于257个字符时,我可以将记录插入数据库服务器。如果它大于257,则失败。但正如我们所看到的,WSDL的字段类型是文本。它允许2147483647个字符。请检查以下调试输出:

>>> for row in cursor.columns(table='services'):
...       print row.column_name + " : " + str(row.data_type) + " size:" + str(row.column_size)
... 
id : 1 size:36
Name : 12 size:45
ServiceDescription : 12 size:256
Version : 12 size:45
Status : 12 size:45
StatusDescription : 12 size:256
WSDL : -1 size:2147483647
WADL : -1 size:2147483647
XSD : -1 size:2147483647
CreatedBy : 12 size:100
CreatedOn : 93 size:23
CreatedAt : 12 size:45
UpdatedBy : 12 size:100
UpdatedOn : 93 size:23
UpdatedAt : 12 size:45
deleted : -7 size:1
name : -9 size:128
service_id : 4 size:10
principal_id : 4 size:10
service_queue_id : 4 size:10

我使用wireshark进行调试,发现sql命令没有发送到sql server。因此,错误消息必须来自SQL Server Native Client驱动程序。

我试图谷歌寻求解决方案,但找不到任何东西。以前是否有人遇到过同样的问题?

P.S。 我在Microsoft SQL Server Management Studio下尝试过相同的命令。它没有任何问题。所以问题可能来自ODBC驱动程序或ODBC驱动程序和pyodbc之间的不匹配。

0 个答案:

没有答案