Python sqlite3 'executemany' 没有成功更新我的数据库
Python sqlite3 'executemany' not successfully updating my database
我正在尝试从我的数据库中提取一列,应用转换,然后用结果创建一个新列。
我最终想将局部变量 'new_proba'(长度为 740,与我的数据库长度相同)保存为名为 'predict_proba_tplus1' 的新列。通过阅读 this thread,我了解到 UPDATE 函数需要一个元组。
我创建了一个 'IDs' 列表,它匹配数据库中的 indexID 列,然后用 'new_proba' 压缩它以创建输出 '(0.56298709097028454, 0), (0.54392926856501334, 1) ,'等
下面的函数实际上并没有抛出任何错误,但它只创建了列 'predict_proba_tplus1' 并且没有填写我希望 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()
这些值并不简单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))
我正在尝试从我的数据库中提取一列,应用转换,然后用结果创建一个新列。
我最终想将局部变量 'new_proba'(长度为 740,与我的数据库长度相同)保存为名为 'predict_proba_tplus1' 的新列。通过阅读 this thread,我了解到 UPDATE 函数需要一个元组。
我创建了一个 'IDs' 列表,它匹配数据库中的 indexID 列,然后用 'new_proba' 压缩它以创建输出 '(0.56298709097028454, 0), (0.54392926856501334, 1) ,'等
下面的函数实际上并没有抛出任何错误,但它只创建了列 'predict_proba_tplus1' 并且没有填写我希望 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()
这些值并不简单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))