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中的字典遍历备忘
Jan 17 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 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 Session存储到Redis的方法
2013/11/04 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php使用PDO方法详解
2014/12/27 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
Python入门篇之字典
2014/10/17 Python
Flask之flask-script模块使用
2018/07/26 Python
Django中的ajax请求
2018/10/19 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
解决Python中回文数和质数的问题
2019/11/24 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
浅谈Python3中print函数的换行
2020/08/05 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
电气工程师岗位职责
2015/02/12 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis