Я пытаюсь извлечь столбец из моей базы данных, применить преобразование и создать новый столбец с результатами.Python sqlite3 'executemany' не успешно обновляет мою базу данных
Я в конечном счете хочу сохранить локальную переменную 'new_proba' (которая имеет длину 740, такую же длину, что и моя база данных) в качестве нового столбца, называемого «pred_proba_tplus1». Из чтения this thread я узнал, что функция UPDATE ожидает кортеж.
Я создал список «» идентификаторы, который соответствует столбец IndexID в базе данных, а затем заархивированы его с «new_proba», чтобы создать кортеж, который выводит «(0.56298709097028454, 0), (0,54392926856501334, 1),» и т.д.
Функция, приведенная ниже, не вызывает никакой ошибки, но создает только столбец «preview_proba_tplus1» и не заполняет никаких значений, которые я ожидал бы от c.executemany(), - я остался с новый столбец, заполненный значениями NULL. Это заставляет меня думать, что что-то не так с оператором WHERE, т. Е. По какой-то причине не соответствует столбцу indexID переменной ID, несмотря на то, что числа одинаковы.
Любое понимание было бы чрезвычайно оценено.
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()
Вы _sure_, что 'new_proba_tuple' содержит нужные данные в нужном формате? Вы даете несколько примеров содержимого в третьем абзаце в своем сообщении, но формат кажется странным - он заключен в кавычки (подразумевая, что это фактически строка), и это __not__ заключено в квадратные скобки (подразумевая, что это не список). –
Спасибо за ответ. Это формат вывода (я добавил цитату в последнем сообщении: [(0.56298709097028454, 0), (0.54392926856501334, 1), (0.58659573866520598, 2) и т. Д. – BernoulliSanders
Попробуйте выполнить один оператор 'execute' с одной строкой данных и Посмотрите, работает ли это. –