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的装饰器的运用
May 05 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
浅谈Python中range和xrange的区别
Dec 20 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
Python字符串的常见操作实例小结
Apr 08 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
python db类用法说明
Jul 07 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
使用tensorflow进行音乐类型的分类
Aug 14 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
表单复选框向PHP传输数据的代码
2007/11/13 PHP
解析php取整的几种方式
2013/06/25 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php多重接口的实现方法
2015/06/20 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
js使用心得分享
2015/01/13 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
python实现堆栈与队列的方法
2015/01/15 Python
python中eval与int的区别浅析
2019/08/11 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
装潢设计专业推荐信模板
2013/11/26 职场文书
关于毕业的广播稿
2014/01/10 职场文书
十八大闭幕感言
2014/01/22 职场文书
环保倡议书
2014/04/14 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
国际金融专业自荐信
2014/07/05 职场文书
国庆促销活动总结
2014/08/29 职场文书
财务负责人岗位职责
2015/02/03 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
辞职申请书范本
2019/05/20 职场文书
MySQL触发器的使用
2021/05/24 MySQL
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
Python基本的内置数据类型及使用方法
2022/04/13 Python