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 30 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
python实现数据分析与建模
Jul 11 Python
python实现人工智能Ai抠图功能
Sep 05 Python
python tkinter图形界面代码统计工具
Sep 18 Python
python实现猜数字游戏
Mar 25 Python
利用Python计算KS的实例详解
Mar 03 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
python+opencv实现目标跟踪过程
Jun 21 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
深入解析php模板技术原理【一】
2008/01/10 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
php经典算法集锦
2015/11/14 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
JS location几个方法小姐
2008/07/09 Javascript
javascript 闭包
2011/09/15 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python网站验证码识别
2016/01/25 Python
python的pip安装以及使用教程
2018/09/18 Python
python的依赖管理的实现
2019/05/14 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
Python的形参和实参使用方式
2019/12/24 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
商务日语专业毕业生求职信
2013/10/26 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
检讨书怎么写
2015/01/23 职场文书
2015年工会工作总结
2015/03/30 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python