我在sqlite数据库中存储numpy数组时遇到问题。我有1个名称和数据表。
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\)]
这有什么问题?谢谢。
P.S。我从这里尝试了解决方案Python insert numpy array into sqlite3 database,但它没有用。我的numpy数组是用带有HOG的skimage(scikit-image)库(面向渐变的直方图)计算出来的。也许这是个问题...... 还试图从opencv3计算和存储它,但也有同样的问题。
答案 0 :(得分:0)
假设它正在将data.tostring()
保存到数据库,我尝试用fromstring
解码它。
使用您显示的字符串,并删除我得到的几个字节:
In [79]: np.fromstring(b'\xccX+\xa8.\x03\xa4?\xf7\xda[\x1f\x10l\xc7?', float)
Out[79]: array([ 0.03908678, 0.18298532])
至少有一个匹配的数字,所以看起来很有希望。