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性能优化技巧
Mar 09 Python
python从sqlite读取并显示数据的方法
May 08 Python
Python 学习教程之networkx
Apr 15 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python访问Redis的详细操作
Jun 26 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
使用python在本地电脑上快速处理数据
2017/06/22 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
pytorch 共享参数的示例
2019/08/17 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
Python基于execjs运行js过程解析
2020/11/27 Python
总经理秘书的岗位职责
2013/12/27 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
2014年党支部工作总结
2014/11/13 职场文书
单位接收函格式
2015/01/30 职场文书
员工自我工作评价
2015/03/06 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs