python中sqllite插入numpy数组到数据库的实现方法


Posted in Python onJune 21, 2021

sqllite里面并没有与numpy的array类型对应的数据类型,通常我们都需要将数组转换为text之后再插入到数据库中,或者以blob类型来存储数组数据,除此之外我们还有另一种方法,能够让我们直接以array来插入和查询数据,实现代码如下

import sqlite3
import numpy as np
import io

def adapt_array(arr):
    out = io.BytesIO()
    np.save(out, arr)
    out.seek(0)
    return sqlite3.Binary(out.read())

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


# 当插入数据的时候将array转换为text插入
sqlite3.register_adapter(np.ndarray, adapt_array)

# 当查询数据的时候将text转换为array
sqlite3.register_converter("array", convert_array)


#连接数据库
con = sqlite3.connect("test.db", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.cursor()

#创建表
cur.execute("create table test (arr array)")

#插入数据
x = np.arange(12).reshape(2,6)
cur.execute("insert into test (arr) values (?)", (x, ))

#查询数据
cur.execute("select arr from test")
data = cur.fetchone()[0]

print(data)
# [[ 0  1  2  3  4  5]
#  [ 6  7  8  9 10 11]]
print(type(data))
# <type 'numpy.ndarray'>

实例代码看下Python 操作sqlite数据库及保存查询numpy类型数据

# -*- coding: utf-8 -*-
'''
Created on 2019年3月6日

@author: Administrator
'''
import sqlite3
import numpy as np
import io

def adapt_array(arr):

    out = io.BytesIO()
    np.save(out, arr)
    out.seek(0)
    return sqlite3.Binary(out.read())

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

# 创建数据库连接对象
conn = sqlite3.connect('sample_database.db', detect_types=sqlite3.PARSE_DECLTYPES)  # 连接到SQLite数据库
'''
sqlite3.PARSE_DECLTYPES
本常量使用在函数connect()里,设置在关键字参数detect_types上面。表示在返回一行值时,是否分析这列值的数据类型定义。如果设置了本参数,就进行分析数据表列的类型,并返回此类型的对象,并不是返回字符串的形式。

sqlite3.PARSE_COLNAMES 
本常量使用在函数connect()里,设置在关键字参数detect_types上面。表示在返回一行值时,是否分析这列值的名称。如果设置了本参数,就进行分析数据表列的名称,并返回此类型的名称
'''
# 参数:memory:来创建一个内存数据库
# conn = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)

# Converts np.array to TEXT when inserting
sqlite3.register_adapter(np.ndarray, adapt_array)

# Converts TEXT to np.array when selecting
sqlite3.register_converter("array", convert_array)

x = np.arange(12).reshape(2, 6)

# conn = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cursor = conn.cursor()
# 创建数据库表
cursor.execute("create table test (arr array)")
# 插入一行数据
cursor.execute("insert into test (arr) values (?)", (x,))
# 提交
conn.commit()

cursor.execute("select arr from test")
data = cursor.fetchone()[0]

print(data)
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
'''
print(type(data))
'''
<class 'numpy.ndarray'>
'''
cursor.close()  # 关闭Cursor
conn.close()  # 关闭数据库

以上就是python中sqllite插入numpy数组到数据库的实现方法的详细内容,更多关于python numpy数组的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
python中dir函数用法分析
Apr 17 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
django用户登录和注销的实现方法
Jul 16 Python
python numpy元素的区间查找方法
Nov 14 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
python生成可执行exe控制Microsip自动填写号码并拨打功能
详解Python自动化之文件自动化处理
Jun 21 #Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 #Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 #Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 #Python
You might like
apache rewrite_module模块使用教程
2008/01/10 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
zend framework重定向方法小结
2016/05/28 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
Python对切片命名的实现方法
2018/10/16 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
精彩自我鉴定
2014/01/16 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
房屋继承公证书
2014/04/10 职场文书
公司募捐倡议书
2014/05/14 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
红领巾广播站广播稿
2015/08/19 职场文书