【问题标题】:Pandas dataframe read_sql read string larger than 1023 charactersPandas dataframe read_sql 读取大于 1023 个字符的字符串
【发布时间】:2017-06-06 13:13:57
【问题描述】:

我正在尝试从 MS SQL 表中读取数据,其中一列包含大于 1024 个字符的 varchar。 当我将查询读入数据框时,字符串被截断为 1023 个字符。请参阅下面的代码和输出。 有谁知道我如何将大于 1023 个字符的字符串放入数据框中? 我一直在环顾四周,并在 DataFrame 文档中,但我没有找到答案。

在下表的代码中,test 包含一个列“s”,其中一行的字符串长度为 1100。列“len_s”包含字符串“s”的长度(在 SQL 服务器中计算)。

import pypyodbc
from pandas import Series, DataFrame
import pandas as pd

#print("set connection string ...")
connection_string ='Driver={SQL Server Native Client 11.0};Server= ....'

#connect to SQL server
con = pypyodbc.connect(connection_string)

query="select a, s, len(s) as len_s from test"

df=pd.read_sql_query(query, con)

print(df)
print(len(df['s'][1]))

输出是:

   a                                                  s  len_s
0  1                                        01234567890     11
1  2  0123456789012345678901234567890123456789012345...   1100
1023

所以在数据框中,字符串被截断了...... 有什么建议吗?

【问题讨论】:

  • 我认为这只是一种表示(检查pd.options.display.max_colwidth 参数)。 print(df.s.str.len()) 的输出是什么?

标签: python pandas dataframe python-3.5


【解决方案1】:

我找到了解决方案。它似乎与 Dataframes / Pandas 甚至 Python 无关,但当我搜索“pypyodbc”时,我发现这个问题已解决:

how-to-get-entire-varcharmax-column-with-python-pypyodbc

他们发现问题出在 SQL Server 本机客户端驱动程序上。他们建议改用 SQL Server 标准驱动程序。

所以我还将我的 ODBC 连接字符串中的驱动程序从 SQL Server Native Client 11.0 更改为 SQL Server,它运行良好!我正在获取 MSSQL 数据表中 VARCHAR(MAX) 列的全部内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2019-08-28
    • 2016-07-05
    • 2021-12-28
    • 2017-02-28
    相关资源
    最近更新 更多