在SQLite数据库中存储NumPy数组时遇到问题。我有一个表的名称和数据。
import sqlite3 as sql
from DIP import dip # function to caclculate numpy array
name = input('Enter your full name\t')
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.\x03\xa4?\xf7\xda[\x1f ..., x10l\xc7?\xbf\x14\x12\)]
这有什么问题吗?谢谢。
附注:我试了一下Python insert numpy array into sqlite3 database的解决方案,但不起作用。我的NumPy数组是用HOG(定向梯度直方图)从skImage(sorkit-Image)库中计算出来的。也许这是个问题..。我也试图从opencv3中计算并存储它,但遇到了相同的问题。
2条答案
按热度按时间yqkkidmi1#
假设它将
data.tostring()
保存到数据库中,我尝试使用fromstring
对其进行解码。使用您显示的字符串,并修剪掉我得到的几个字节:
至少有一个匹配的号码,所以这看起来很有希望。
juud5qan2#
我也遇到过类似的问题,我发现SQLite在存储自定义NumPy浮点类型(在我的例子中是
np.float32
)方面有问题。将浮点值的类型更改为字符串,就可以很好地工作。
[float(x) for x in data]