我正在尝试从MS SQL表中读取数据,其中一列包含大于1024个字符的varchar。 当我将查询读入数据帧时,字符串被截断为1023个字符。请参阅下面的代码和输出。 有谁知道如何在数据帧中获得大于1023个字符串的字符串? 我一直在环顾四周,在DataFrame文档中,但我还没有找到答案。
在下面的代码表中,test包含一个列's',其中一行有一个长度为1100的字符串。列'len_s'包含字符串's'的长度(在SQL server中计算)。
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
所以在数据框中,字符串被截断... 有什么建议吗?
答案 0 :(得分:1)
我找到了解决方案。它似乎与Dataframes / Pandas甚至是Python没有任何关系,但当我搜索“pypyodbc”时#39; 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)列的全部内容。