К сожалению, MS Access (в частности, ее диск уровня Jet/ACE Двигатель не программа GUI .exe) не поддерживается с помощью SQLAlchemy, чтобы разрешить метод pandas.to_sql()
, который в идеале вы можете подтолкнуть вашу фреймворк к временной таблице в базе данных, чтобы запустить запрос UPDATE final INNER JOIN temp ...
для обновления финальной таблицы, гораздо более быстрый маршрут чем повторение строк.
К счастью, MS Access 'Jet/ACE Engine может запрашивать файлы csv, как если бы они были таблицами, где вы указываете путь к файлу, а затем имя файла csv. Следовательно, рассмотрите возможность экспорта dataframe to_csv, затем создайте временную таблицу с помощью запроса Make-Table и, наконец, запустите запрос соединения обновления. Ниже try/except
используется для удаления таблицы, если существует (поскольку команда IF EXISTS
недоступна в 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()
И нет, мы не можем напрямую использовать CSV-файл в UPDATE
запросе (обходя температуру процесса таблицы), как CSV является только для чтения и не обновляемые записей. Интересно, что вы можете использовать CSV в INSERT...SELECT
.
это работает !. Это очень быстро. Я не знал временные файлы csv в доступе ms. Я очень благодарен всем вам. – calobeto