的SQLAlchemy期截断字符串进口从MS SQL
问题描述:
首先,这是我的设置:的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或其他东西的限制吗?
任何帮助表示赞赏!
答
同样的问题在这里!
设置:
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)。
谢谢,解决方法效果很好!看起来,fetchall()的行为确实会截断大标量值并插入“N个字符截断”符号,这是根据您提供的页面上的讨论设计的。 –