pymssql ntext字段调用问题解决方法_python

下面是调用方式:

Example script - pymssql module (DB API 2.0)

Example script - _mssql module (lower level DB access)

不过,在我使用过程中,发现,如果表中包含了ntext字段,就会出错,提示

不能用 DB-Library(如 ISQL)或 ODBC 3.7 或更早版本将 ntext 数据或仅使用

Unicode排序规则的 Unicode 数据发送到客户端。

查了一下,发现官方网站有解释:

Q: What means "Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library"?

A: If you connect to a SQL Server 2000 SP4 or SQL Server 2005, and if you make a SELECT query on a table that contains a column of type NTEXT, you may encounter the following error:
_mssql.error: SQL Server message 4004, severity 16, state 1, line 1:
Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.
It's the SQL Server complaining that it doesn't support pure Unicode via TDS or older versions of ODBC. There's no fix for this error. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren't accessible via DB-Library so if you need them, you have to switch away from pymssql or other tools based on TDS and DB-Library.

A workaround is to change the column type to NVARCHAR (it doesn't exhibit this behaviour), or TEXT.

大概意思是,这是因为我们的pymssql使用早期的ODBC函数集来获取数据。后来微软才引入了ntext和nvarchar类型,但Microsoft并没有更新他们的 C-library,所以就没办法支持了。建议:将ntext修改为nvarchar或text.

显然,这不是个好的解决方法,那么是否就没有其他办法了呢?

还好,不用绝望,既然不支持ntext但支持text,那么我们只需要在输出时将ntext转换为text就好了,方法很简单:


SELECT cast ( field_name AS TEXT ) AS field_name

唯一的问题,可能是ntext和text字段所支持的长度不一样,所以也许你还需要设置一下TEXTSIZE


SET TEXTSIZE 65536

当然,你还可以将字段设置的大一点,这个就看你的需要了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索pymssql
, 调用
ntext
python pymssql、python pymssql 安装、python3.5安装pymssql、python3 pymssql、python3.5 pymssql,以便于您获取更多的相关知识。

时间: 2024-11-27 15:23:48

pymssql ntext字段调用问题解决方法_python的相关文章

pymongo实现控制mongodb中数字字段做加法的方法_python

本文实例讲述了pymongo实现控制mongodb中数字字段做加法的方法.分享给大家供大家参考.具体分析如下: 这个非常实用,比如我们需要给文章做访问统计,可以设置一个数字字段:hit,然后每次点击后给改字段增加1即可 import pymongo #导入pymongo 模块 conn = pymongo.Connection() #连接本地mongodb数据库 db=conn.database #database为数据库名称 collection = db.article #article为c

SQL Server中text或ntext 字段内容替换方法

  update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值') 1.update ntext: (1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace. update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),

Python连接mssql数据库编码问题解决方法_python

python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合). (1).首先,要保证文件的开头要加上编码设置来说明文件的编码 复制代码 代码如下: #encoding=utf-8 (2).然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号 复制代码 代码如下: conn=p

Python安装Imaging报错:The _imaging C module is not installed问题解决方法_python

今天写Python程序上传图片需要用到PIL库,于是到http://www.pythonware.com/products/pil/#pil117下载了一个1.1.7版本的,我用的是CentOS64 并且自行升级后的Python版本安装PIL库 首先下载解压: 复制代码 代码如下: [root@lee ~]# wget http://www.pythonware.com/products/pil/#pil117 [root@lee ~]# tar -xf Imaging-1.1.7.tar.gz

Python中使用socket发送HTTP请求数据接收不完整问题解决方法_python

由于工作的需求,需要用python做一个类似网络爬虫的采集器.虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需求,如手动设定User-Agent,Referer等,所以选择了直接用socket进行设计.当然,这样的话,需要对HTTP协议比较熟悉,HTTP协议这里就不做讲解了.整个python的代码如下: #!/usr/bin env python import socket host="www.baidu.com" se=socket.socket(soc

python 写入csv乱码问题解决方法_python

需求背景 最近为公司开发了一套邮件日报程序,邮件一般就是表格,图片,然后就是附件.附件一般都是默认写到txt文件里,但是PM希望邮件里的附件能直接用Excel这种软件打开,最开始想保存为Excel,但是一想Excel的文件体积会多出好多倍,csv文件默认也是使用Excel打开的,但是根本还是文本文件,体积小,保存也方便,于是最终决定使用csv模块来保存文件. Python写csv文件 Python提供了内置模块读写csv文件,这里我只用到了写,读这里就不做介绍了,也不难,主要是解决乱码问题. d

Python os模块中的isfile()和isdir()函数均返回false问题解决方法_python

今天在写一个linux下自动备份指定目录下的所有目录的脚本时,遇到了一个问题,由于我是需要备份目录,所以,需要判断扫描的文件是否为目录,当我用os.path.isdir()来判断的时候,发现所有文件均返回false,刚开始以为是系统兼容性问题,进一步测试,发现用os.path.isfile(),这些文件还是返回false,这肯定就是程序写的有问题了,代码如下: #!/usr/bin/env python # a python script to auto backup a directory's

rhythmbox中文名乱码问题解决方法_python

sudo apt-get install python-mutagen mid3iconv -e gbk *.mp3 将中文歌曲名转换编码 当前目录下的所有 mp3 (包括子目录) find . -iname "*.mp3" -execdir mid3iconv -e gbk {} ;

Python使用urllib模块的urlopen超时问题解决方法_python

在新的公司开始上班,今天工作的主题内容是市场部门需要抓取一些论坛用户的邮箱,以便发送营销邮件. 于是用了一个python脚本来执行,前面抓了几个都没有什么问题,后来碰到一个论坛,在执行urlopen的地方总是提示超时,百度了一下,因为我使用的是urllib不是urllib2,所以无法直接在urlopen里面加timeout参数,只能是设置全局脚本的超时时间 首先: 复制代码 代码如下: import socket 然后: 复制代码 代码如下: socket.setdefaulttimeout(6