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

How to get entire VARCHAR(MAX) column with Python pypyodbc

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

这是我的设置:

我遇到的问题是,当我使用 varchar(max) 列查询 table 时,内容被截断了。

我是 pypyodbc 的新手,我一直在疯狂地搜索,但找不到任何关于如何防止这种情况在 pypyodbc 甚至 pyodbc 中发生的信息。至少不是我一直在使用的搜索词,我不知道要尝试其他什么词组。

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

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

更新:

因此,我尝试在 SQL 查询中执行转换。当我执行 CAST(my_column as VARCHAR(MAX)) 时,它会在同一位置截断。但是,如果我这样做 CAST(my_column as VARCHAR(8000)) 它会给我更大的文本集,但它仍然会截断一些内容。如果我尝试做任何大于 8000 的事情,我会收到一条错误消息,指出 8000 是我可以使用的最大值。有人知道这里会发生什么吗?使用 MAX 不起作用似乎很奇怪。

我假设您使用的是 FreeTDS,因为我以前见过这个问题。在您的 freetds.conf 文件中,可能在 [global]:

[global]
text size = 64512

根据您的 SQL 服务器版本,将其更改为:

[global]
text size = 4294967295

您还需要更改任何 DSN。

如果这不是问题,我们需要更多信息:您是从 Linux 还是 Windows 连接的? SQL 服务器是哪个版本?您使用什么驱动程序进行连接?

好吧,我最终解决了问题。我发现这个 link 关于类似的问题,只是不在 python 中,他们发现问题出在 SQL 服务器本机客户端驱动程序上。他们建议改用 SQL 服务器标准驱动程序。

所以我将我的 ODBC 连接字符串中的驱动程序从 SQL Server Native Client 11.0 更改为 SQL Server,它工作得很好!我正在获取我的 MSSQL 数据 table.

中 VARCHAR(MAX) 列的全部内容

我真的希望这对遇到此问题的其他人有用!祝你好运!

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

“{SQL 服务器}”在我的情况下不起作用。如果数据库在我的本地机器上,“{SQL Server}”可以很好地工作。但是,如果我尝试连接到远程服务器,下面的错误消息总是 return:

pypyodbc.DatabaseError: ('08001', '[08001] [Microsoft][ODBC SQL 服务器驱动程序][DBNETLIB]SSL 安全错误')

对于那些仍在 VARCHAR(MAX) 截断中苦苦挣扎的人来说,我的同事提出的一个绝妙的解决方法是 CAST VARCHAR(MAX) TEXT 类型。

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

希望对您有所帮助!