如何使用Python pypyodbc获取整个VARCHAR(MAX)列

CM-*_*Dev 7 python sql-server pyodbc pypyodbc

我有一个Python程序,使用ODBC连接连接到MSSQL数据库.我正在使用的Python库是pypyodbc.

这是我的设置:

  • Windows 8.1 x64
  • SQL Server 2014 x64
  • Python 2.7.9150
  • PyPyODBC 1.3.3
  • ODBC驱动程序:SQL Server Native Client 11.0

我遇到的问题是,当我查询带有varchar(max)列的表时,内容被截断.

我是pypyodbc的新手,我一直在疯狂地搜索,并且找不到任何关于如何防止在pypyodbc甚至pyodbc中发生这种情况的事情.至少没有我一直在使用的搜索词,我不知道还有什么其他的短语可以尝试.

我甚至尝试添加SET TEXTSIZE 2147483647;到我的SQL查询,但数据仍然被截断.

我该如何防止这种情况发生?或者,你能指出我正确的方向吗?

更新:

所以,我尝试在我的SQL查询中执行强制转换.当我这样做CAST(my_column as VARCHAR(MAX))时截断在相同的位置.但是,如果我这样做CAST(my_column as VARCHAR(8000))会给我一个更大的文本集,但它仍然会截断一些内容.如果我尝试做任何比8000我更大的错误,说8000我是最大的,我可以使用.有人知道这里会发生什么吗?使用MAX不起作用似乎很奇怪.

CM-*_*Dev 11

好吧,我最终解决了问题.我找到了关于类似问题的链接,只是没有在python中,他们发现问题出在SQL Server本机客户端驱动程序上.他们建议使用SQL Server标准驱动程序.

所以我改变了我的司机在我的ODBC连接字符串来自SQL Server Native Client 11.0SQL Server它的工作完美!我在MSSQL数据表中获取VARCHAR(MAX)列的全部内容.

我真的希望这证明对遇到这个问题的任何人都有用!祝好运!

这是链接:http: //www.sqlservercentral.com/Forums/Topic1534163-391-1.aspx


小智 5

在我的情况下,“ {SQL Server}”不起作用。如果数据库位于我的本地计算机上,则“ {SQL Server}”可以很好地工作。但是,如果我尝试连接到远程服务器,则始终会返回以下错误消息:

pypyodbc.DatabaseError :(“ 08001”,“ [08001] [Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] SSL安全性错误”)

对于仍在VARCHAR(MAX)截断中挣扎的那些人,我的同事提出的一个出色的解决方法是将VARCHAR(MAX)转换TEXT类型。

假设我们有一个名为note的列,其数据类型为VARCHAR(MAX),而不是使用SELECT note FROM notebook编写SELECT CAST(note AS TEXT) FROM notebook

希望能帮助到你!