在sqlite3数据库中存储numpy数组有python问题



我有一个在sqlite数据库中存储numpy数组的问题。我有一个表的名称和数据。

import sqlite3 as sql
from DIP import dip      # function to caclculate numpy array
name = input('Enter your full namet')
data = dip()
con = sql.connect('Database.db')
c = con.cursor()
c.execute("CREATE TABLE IF NOT EXISTS database(Name text, Vein real )")
con.commit()
c.execute("INSERT INTO database VALUES(?,?)", (name, data))
con.commit()
c.execute("SELECT * FROM database")
df = c.fetchall()
print(data)
print(df)
con.close()

一切都很好,但是当数据被存储时,而不是这样:

[('Name', 0.03908678  0.04326234  0.18298542 ...,  0.15228545  0.09972548   0.03992807)]

我有这个:

[('Name', b'xccX+xa8.x03xa4?xf7xda[x1f ..., x10lxc7?xbfx14x12)]

这有什么问题?谢谢你。

注:我尝试了解决方案,从这里Python插入numpy数组到sqlite3数据库,但它没有工作。我的numpy数组是用HOG(定向梯度直方图)从skimage (scikit-image)库计算出来的。也许这是个问题……也试图计算和存储它从openv3,但有同样的问题。

假设它正在将data.tostring()保存到数据库中,我尝试用fromstring解码它。

使用您显示的字符串,并修剪掉几个字节,我得到:

In [79]: np.fromstring(b'xccX+xa8.x03xa4?xf7xda[x1fx10lxc7?', float)
Out[79]: array([ 0.03908678,  0.18298532])

至少有一个匹配的数字,所以这看起来很有希望。

我有类似的问题,我发现sqlite有存储自定义numpy浮点类型(np.float32在我的情况下)的问题。

将浮点值的类型更改为string,它将正常工作。

[float(x) for x in data]

最新更新