2017-10-13 103 views
0

首先,这是我的设置:的SQLAlchemy期截断字符串进口从MS SQL

  • 的Windows 7
  • MS SQL Server 2008的
  • 的Python 3.6蟒蛇分布

我在工作一个Jupyter笔记本,并尝试使用SQLAlchemy从MS SQL Server数据库导入一列数据。所讨论的列包含存储长字符串文本的单元格(数据类型为nvarchar(max))。这是我的代码:

engine = create_engine('mssql+pyodbc://user:[email protected]:port/db_name?driver=SQL+Server+Native+Client+11.0' 
stmt = 'SELECT componenttext FROM TranscriptComponent WHERE transcriptId=1265293' 

connection = engine.connect() results = connection.execute(stmt).fetchall()

此执行罚款,并导入字符串列表。然而,当我检查字符串他们被截断,并在字符串中间的下面的消息似乎已经被插入:

... (8326 characters truncated) ...

有了不同的字符从串来串的数量。我检查了导入的字符串有多长,并且被截断的字符串都被限制为339或340个字符。

这是SQLAlchemy,Python或其他东西的限制吗?

任何帮助表示赞赏!

回答

0

同样的问题在这里!

设置:

Windows Server 2012中 的MS SQL Server 2016/PostgreSQL的10.1 的Python 3.6蟒蛇分布 我测试过的一切我可以,但不能立交桥字段长度这个33倍的限制。 varchar/text似乎受到影响,DBMS /驱动程序似乎没有任何影响。

编辑:

找到 “问题” 的来源:https://bitbucket.org/zzzeek/sqlalchemy/issues/2837

好像使用fetchall()由该特征的影响。

我发现的唯一的解决方法是:

empty_list=[] 
connection = engine.connect() 
results = connection.execute(stmt) 
for row in results: 
    empty_list.append(row['componenttext']) 

这样,我没有找到我的长字符串场任意截断(> 3000 CH)。

+0

谢谢,解决方法效果很好!看起来,fetchall()的行为确实会截断大标量值并插入“N个字符截断”符号,这是根据您提供的页面上的讨论设计的。 –