Я пытаюсь сгенерировать и вставить много (> 1.000.000) строк в базу данных MS Access.Для генерации я использую функции NumPy, поэтому я пытаюсь получить доступ к базе данных с помощью Python.Я начал с pyodbc:
import numpy as np
import pyodbc as db
connection_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users.../DataCreation.accdb;"
connection = db.connect(connection_string)
cur = connection.cursor()
k = 0
numberofdatasets=1000
for l in range(50):
params=np.empty(numberofdatasets, dtype=[('valnr', int),('val', float)])
for j in range(numberofdatasets):
params[j]= (k, somevalue generated with a numpy function)
k=k+1
params = np.array(params).tolist()
cur.executemany("INSERT INTO DataFinal VALUES (1,?,1,?);", params)
connection.commit()
connection.close()
Это работает, но занимает слишком много времени, чтобы быть полезным для меня.Я рассчитал время, и проблема в том, что
cur.executemany
Я искал в интернете и обнаружил флаг fast_executemany.Но когда я добавляю строку
cur.fast_executemany = True
, мое ядро умирает.У кого-нибудь есть идеи почему?Я использую 64-битную Windows 10, Python 3.6, Spyder 3.2.8 и MS Access 2016. Пожалуйста, не предлагайте не использовать MS Access, я знаю, что для этого есть более эффективные базы данных, но сейчас это все, что яможешь использовать.Я также знаю, что это может быть не лучшим образом сначала создать массив NumPy, а затем превратить его в список.Моей следующей попыткой был turbodbc и его функция
cursor.executemanycolumns
, но это вызвало ошибку в драйвере и, следовательно, я считаю, что это другая проблема.Любая помощь приветствуется, но, возможно, я должен добавить, что я только начал использовать Python для работы с базами данных, и я предпочитаю хотя бы немного понять проблему, а не просто копировать какой-то загадочный код :) Спасибо.