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

时间:2017-10-13 15:49:41

标签: sql-server python-3.x sqlalchemy anaconda

首先,这是我的设置:

  • Windows 7
  • MS SQL Server 2008
  • Python 3.6 Anaconda Distribution

我正在使用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还是其他一些限制?

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

这里有同样的问题!

设置:

Windows Server 2012 MS SQL Server 2016 / PostgreSQL 10.1 Python 3.6 Anaconda Distribution 我已经测试了我能做的一切,但是不能超过这个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)中找不到任何截断。