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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
Python操作列表的常用方法分享
Feb 13 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python的语言类型(详解)
Jun 24 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
Django实现文件上传下载
Oct 06 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
python入门之基础语法学习笔记
Feb 08 Python
Python高并发和多线程有什么关系
Nov 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/02/25 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
jquery的map与get方法详解
2013/11/04 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
JavaScript中DOM详解
2015/04/13 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
python分割和拼接字符串
2013/11/01 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Python 常用string函数详解
2016/05/30 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
恶意软件的定义
2014/11/12 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
写好求职信第一句话的技巧
2013/10/26 职场文书
迎新晚会策划方案
2014/06/13 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
未中标通知书
2015/04/17 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android