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 26 Python
python根据京东商品url获取产品价格
Aug 09 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
解决yum对python依赖版本问题
Jul 05 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
python 实现图片批量压缩的示例
Dec 18 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 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
对javascript和select部件的结合运用
2006/10/09 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php中strtotime函数性能分析
2016/11/20 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
Python随机生成数模块random使用实例
2015/04/13 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
django 中QuerySet特性功能详解
2019/07/25 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
django orm模块中的 is_delete用法
2020/05/20 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
摄影实习自我鉴定
2013/09/20 职场文书
后勤部长岗位职责
2013/12/14 职场文书
初中音乐教学反思
2014/01/12 职场文书
小学防溺水制度
2014/01/29 职场文书
班主任先进事迹材料
2014/12/17 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
SQL中的连接查询详解
2022/06/21 SQL Server
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers