Я хотел бы отправить большой pandas.DataFrame
на удаленный сервер с MS SQL. То, как я делаю это сейчас, - это преобразовать объект data_frame
в список кортежей и затем отправить его с помощью executemany()
pyODBC executemany()
. Это выглядит примерно так:
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()
Затем я начал задаваться вопросом, можно ли ускорить работу (или, по крайней мере, более читаемую), с помощью data_frame.to_sql()
. Я придумал следующее решение:
import sqlalchemy as sa
engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % cnxn_str)
data_frame.to_sql(table_name, engine, index=False)
Теперь код более читабельен, но загрузка по меньшей мере в 150 раз медленнее...
Есть ли способ перевернуть fast_executemany
при использовании SQLAlchemy?
Я использую pandas-0.20.3, pyODBC-4.0.21 и sqlalchemy-1.1.13.