2017-10-13 3 views
0

Tout d'abord c'est ma configuration:SQLAlchemy tronquer Cordes sur Importer à partir de MS SQL

  • Windows 7
  • MS SQL Server 2008
  • Python 3.6 Anaconda Répartition

Je travaille dans un bloc-notes Jupyter et en essayant d'importer une colonne de données à partir d'une base de données MS SQL Server en utilisant SQLAlchemy. La colonne en question contient des cellules qui stockent de longues chaînes de texte (le type de données est nvarchar (max)). Ceci est mon code:

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()

Cette exécute bien, et importe une liste de chaînes. Cependant, quand j'examine les chaînes auxquelles elles sont tronquées, et au milieu des cordes le message suivant semble avoir été inséré:

... (8326 characters truncated) ...

Avec le nombre de caractères variant de chaîne à chaîne. J'ai vérifié la durée des chaînes importées et celles qui ont été tronquées sont toutes limitées à 339 ou 340 caractères.

Est-ce une limitation dans SQLAlchemy, Python ou autre chose entièrement?

Toute aide appréciée!

Répondre

0

Même problème ici!

Mise en place:

Windows Server 2012 MS SQL Server 2016/PostgreSQL 10.1 Python 3.6 Anaconda distribution J'ai tout testé je pouvais, mais ne peut pas outrepasser cette limitation 33x en longueur du champ. Soit varchar/text semble être affecté et le SGBD/driver ne semble pas avoir d'influence.

EDIT:

trouvé la source du "problème": https://bitbucket.org/zzzeek/sqlalchemy/issues/2837

On dirait fetchall() est affectée par cette fonction.

La seule solution que j'ai trouvé:

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

De cette façon, je ne l'ai pas trouvé de troncature dans mon long champ de chaîne (> 3000 ch).

+0

Merci, la solution de contournement fonctionne bien! Il semble que le comportement de fetchall() soit en effet tronqué de grandes valeurs scalaires et insère la notation «N caractères tronqués», et ceci est inhérent à la conception de la page que vous avez fournie. –