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字符串对其居中显示的方法
Jul 11 Python
在Python的Django框架中包装视图函数
Jul 20 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
python实现同一局域网下传输图片
Mar 20 Python
python 一维二维插值实例
Apr 22 Python
python代码如何注释
Jun 01 Python
python requests库的使用
Jan 06 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
.htaccess文件保护实例讲解
2011/02/06 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python进阶篇之字典操作总结
2016/11/16 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
本科毕业生自荐信
2014/05/26 职场文书
法制宣传标语
2014/06/23 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
毕业典礼邀请函
2015/01/31 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis