splite3存取numpy数组的方法

splite3中直接采用blob数据类型存取numpy数组,无法测试通过,会的大牛请在评论区留言,谢谢。

经过查找英文资料,得出了splite3存取numpy数组的方法,现在分享给大家如下:

import sqlite3
import numpy as np
import io
import zlib

compressor = zlib.compressobj(1)
decompressor = zlib.decompressobj()

def adapt_array(arr):

    out = io.BytesIO()
    np.save(out, arr)
    out.seek(0)

    dataa=out.read()
    #压缩数据流
    return sqlite3.Binary(zlib.compress(dataa, zlib.Z_BEST_COMPRESSION))

def convert_array(text):
    out = io.BytesIO(text)
    out.seek(0)

    dataa=out.read()
    #解压缩数据流
    out = io.BytesIO(zlib.decompress(dataa))
    return np.load(out)

sqlite3.register_adapter(np.ndarray, adapt_array)
sqlite3.register_converter("array", convert_array)



def test_save_sqlite_arrays():



    con = sqlite3.connect("e:/t1")
    cur = con.cursor()
    cur.execute('create table catalog (des array)')


    des1 =[[16,25,23],[54,23,78]]
    des2 =[[26,12,18]]


    print(type(des1))

    de1=adapt_array(des1)

    print(type(de1))

    de2=adapt_array(des2)

    cur.execute("insert into catalog (des) values(?)",(de1,))
    cur.execute("insert into catalog (des) values(?)",(de2,))
    con.commit()
    con.close()


def test_load_sqlite_arrays():
    con = sqlite3.connect("e:/t1")
    cur = con.cursor()

    cur.execute('select des from catalog')

    origin = cur.fetchall()


    data1=origin[0][0]
    data1=convert_array(data1)
 
    print(data1)
    print(len(data1))
    print(type(data1))

    data2=origin[1][0]
    data2=convert_array(data2)
 
    print(data2)
    print(len(data2))
    print(type(data2))



    cur.execute('DROP TABLE catalog')
    con.commit()
    con.close()


if __name__ == '__main__':
    test_save_sqlite_arrays()
    test_load_sqlite_arrays()

说明:

使用环境:python3.6+win7

以上代码,假设文件名为:test.py,

在windows下的cmd下,进入test.py文件的存取目录,执行如下命令即可:

python test.py

下面是部分代码解释:

import zlib  #用于压缩数据,缩小存储空间。

con = sqlite3.connect("e:/t1")  #链接数据库,地址可以自己更改。

zlib.compress(dataa, zlib.Z_BEST_COMPRESSION)  #用于压缩数据dataa,“zlib.Z_BEST_COMPRESSION”为最优压缩。

原创部分:在python3.6+win7环境下,采用了不同的压缩解压方式。

以上部分代码抄了英文资料,链接:https://stackoverflow.com/questions/18621513/python-insert-numpy-array-into-sqlite3-database。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值