Gravar DataFrames grandes do Pandas no banco de dados do SQL Server
Tenho 74 DataFrames relativamente grandes do Pandas (cerca de 34.600 linhas e 8 colunas) que estou tentando inserir em um banco de dados do SQL Server o mais rápido possível. Depois de fazer algumas pesquisas, aprendi que o bom olepandas.to_sql
A função não é boa para inserções tão grandes em um banco de dados do SQL Server, que foi a abordagem inicial que tomei (muito lenta - quase uma hora para o aplicativo ser concluído em cerca de 4 minutos ao usar o banco de dados mysql).
Este artigo, e muitas outras postagens do StackOverflow foram úteis para me apontar na direção certa, mas encontrei um obstáculo:
Estou tentando usar o Core do SQLAlchemy em vez do ORM pelos motivos explicados no link acima. Então, estou convertendo o quadro de dados em um dicionário, usandopandas.to_dict
e depois fazendo umexecute()
einsert()
:
self._session_factory.engine.execute(
TimeSeriesResultValues.__table__.insert(),
data)
# 'data' is a list of dictionaries.
O problema é que a inserção não está recebendo nenhum valor - eles aparecem como um monte de parênteses vazios e eu recebo este erro:
(pyodbc.IntegretyError) ('23000', "[23000] [FreeTDS][SQL Server]Cannot
insert the value NULL into the column...
Existem valores na lista de dicionários que eu passei, então não consigo descobrir por que os valores não estão aparecendo.
EDITAR:
Aqui está o exemplo do qual estou saindo:
def test_sqlalchemy_core(n=100000):
init_sqlalchemy()
t0 = time.time()
engine.execute(
Customer.__table__.insert(),
[{"name": 'NAME ' + str(i)} for i in range(n)]
)
print("SQLAlchemy Core: Total time for " + str(n) +
" records " + str(time.time() - t0) + " secs")