SQLAlchemy 在从 MS SQL 导入时截断字符串

问题描述 投票:0回答:2

首先这是我的设置:

  • Windows 7
  • MS SQL Server 2008
  • Python 3.6 Anaconda 发行版

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

engine = create_engine('mssql+pyodbc://user:password@server: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 或其他完全的限制吗?

任何帮助表示赞赏!

sql-server python-3.x sqlalchemy anaconda
2个回答
1
投票

同样的问题!

设置:

Windows Server 2012 MS SQL Server 2016/PostgreSQL 10.1 Python 3.6 Anaconda 发行版 我已经测试了我能做的一切,但无法超越字段长度的 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
投票

当我使用 sqlalchemy 执行时,这对我来说是不可挽回的:

SELECT OBJECT_DEFINITION(OBJECT_ID('my_view')) AS ViewDefinition

但是以不同的方式获取视图定义却有效:

EXEC sp_helptext 'my_view'

因为这似乎是按行返回文本而不是一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.