Python sqlite3 'executemany' не успешно обновляет мою базу данных

Я пытаюсь извлечь столбец из моей базы данных, применить преобразование и создать новый столбец с результатами.

В конечном итоге я хочу сохранить локальную переменную 'new_proba' (длина которой 740, то же самое, что и у моей базы данных) в виде нового столбца с именем "prept_proba_tplus1 ". Прочитав эту ветку, я узнал, что функция UPDATE ожидает кортеж.

Я создал список "идентификаторов", который соответствует столбцу indexID в базе данных, а затем заархивировал его с помощью "new_proba", чтобы создать кортеж, который выводит "(0.56298709097028454, 0), (0.54392926856501334, 1) и т. Д.".

Функция, приведенная ниже, на самом деле не выдает никакой ошибки, но создает только столбец "Предикат_про__плате1" и не заполняет значения, которые я ожидал бы сделать с помощью c.executemany() - у меня остался заполненный новый столбец со значениями NULL. Это заставляет меня думать, что с оператором WHERE что-то не так - то есть он по какой-то причине не сопоставляет столбец indexID с переменной IDs, несмотря на то, что числа совпадают.

Любое понимание будет высоко ценится.

def update_class_proba(path):
    conn = sqlite3.connect(path)
    c = conn.cursor()
    cursor = c.execute('SELECT text, indexID FROM reuters_test_X')
    all_rows = cursor.fetchall()
    X = vect.transform(x[0] for x in all_rows)
    new_proba = list(clf.predict_proba(X)[:,1])
    IDs = list(np.arange(0, 740, 1))
    new_proba_tuple = list(zip(new_proba,IDs))
    c.execute('ALTER TABLE reuters_test_X ADD COLUMN predict_proba_tplus1 REAL')
    c.executemany('UPDATE reuters_test_X SET predict_proba_tplus1=? WHERE indexID=?', new_proba_tuple)
    conn.commit()
    conn.close()

1 ответ

Решение

Эти значения не являются простыми float; они numpy.float64, который база данных не может обработать.

Преобразуйте ваши значения в простые float а также int как это:

new_proba = list(float(z) for z in clf.predict_proba(X)[:,1])
IDs = list(int(zz) for zz in np.arange(0, 740, 1))
Другие вопросы по тегам