Accélérer les pandas.DataFrame.to_sql avec fast_executemany de pyODBC

Je voudrais adresser un grand pandas.DataFrame à un serveur distant fonctionnant sous MS SQL. La façon dont je le fais maintenant, c'est par la conversion d'un data_frame objet d'une liste de tuples et ensuite l'envoyer balader avec pyODBC de executemany() fonction. Il va quelque chose comme ceci:

 import pyodbc as pdb

 list_of_tuples = convert_df(data_frame)

 connection = pdb.connect(cnxn_str)

 cursor = connection.cursor()
 cursor.fast_executemany = True
 cursor.executemany(sql_statement, list_of_tuples)
 connection.commit()

 cursor.close()
 connection.close()

J'ai alors commencé à me demander si les choses peuvent être accéléré (ou au moins plus lisible) à l'aide de data_frame.to_sql() méthode. Je suis venu avec la solution suivante:

 import sqlalchemy as sa

 engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % cnxn_str)
 data_frame.to_sql(table_name, engine, index=False)

Maintenant le code est plus lisible, mais le téléchargement est au moins 150 fois plus lent...

Est-il un moyen de retourner la fast_executemany lors de l'utilisation de SQLAlchemy?

Je suis en utilisant des pandas-0.20.3, pyODBC-4.0.21 et sqlalchemy-1.1.13.

InformationsquelleAutor J.K. | 2017-12-28