Malheureusement, MS Access (en particulier son Jet-niveau du disque/ACE moteur non le programme GUI .exe) n'est pas supporté par SQLAlchemy pour permettre la méthode pandas.to_sql()
qui idéalement vous pouvez pousser votre dataframe à une table temporaire dans la base de données pour exécuter une requête UPDATE final INNER JOIN temp ...
pour mettre à jour la table finale, une déroute beaucoup plus rapide e que d'itérer entre les lignes.
Heureusement, le moteur Jet/ACE de MS Access peut interroger les fichiers csv comme s'il s'agissait de tables où vous spécifiez le chemin du fichier, puis le nom du fichier csv. Par conséquent, envisagez d'exporter l'infrastructure de données to_csv, puis créez une table temporaire à l'aide de la requête Make-Table et exécutez enfin la requête de jointure de mise à jour. Au-dessous de try/except
est utilisé pour supprimer la table si elle existe (puisque la commande IF EXISTS
n'est pas disponible dans MS Access SQL).
df.to_csv('C:\Path\To\CSV\Output.csv', index=False)
try:
cursor.execute("SELECT * INTO tblhis_ventas_Temp" +\
" FROM [text;HDR=Yes;FMT=Delimited(,);Database=C:\Path\To\CSV].Output.csv")
conn.commit()
cursor.execute("UPDATE tblhis_ventas f INNER JOIN tblhis_ventas_Temp t" + \
" ON f.contrato = t.contrato AND f.estado = t.estado" + \
" SET f. portabilidad = t.portabilidad")
conn.commit()
except Exception as e:
if 'already exists' in str(e):
cursor.execute("DROP TABLE tblhis_ventas_Temp")
conn.commit()
else:
print(e)
cursor.close()
conn.close()
Et non, nous ne pouvons pas utiliser directement le fichier CSV dans UPDATE
requête (sans passer par des processus de table temporaire) comme csv est en lecture seule et non actualisable recordset. Fait intéressant, vous pouvez utiliser CSV dans un INSERT...SELECT
.
ça marche! C'est très rapide. Je ne connaissais pas les fichiers csv temporaires en accès ms. Je vous suis très reconnaissant à tous. – calobeto