2017-10-20 23 views
0

Je tente d'insérer en bloc un csv dans une table dans le serveur SQL. Le problème est que les données ne correspondent pas aux colonnes de la table de destination. La table de destination possède plusieurs colonnes d'audit introuvables dans le fichier source. La solution que j'ai trouvée pour cela est d'insérer dans une vue à la place. Le code est assez simple:Insertion en bloc dans SQL Server avec Python ne fonctionnant pas

from sqlalchemy import create_engine 
engine = create_engine('mssql+pyodbc://[DNS]') 
conn = engine.connect() 
sql = "BULK INSERT [table view] FROM '[source file path]' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')" 
conn.execute(sql) 
conn.close() 

Lorsque j'exécute l'instruction SQL à l'intérieur de SSMS, cela fonctionne parfaitement. Lorsque j'essaie de l'exécuter à partir d'un script Python, le script s'exécute mais aucune donnée ne se retrouve dans la table. Qu'est-ce que je rate?

Mise à jour: Il s'avère que l'insertion en masse dans une table normale ne fonctionne pas non plus.

Répondre

0

Avant de fermer la connexion, vous devez appeler commit() ou les actions SQL seront annulées à la fermeture de la connexion.

conn.commit() 
conn.close()