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中__call__方法示例分析
Oct 11 Python
利用Python爬取微博数据生成词云图片实例代码
Aug 31 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
对Python3 序列解包详解
Feb 16 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 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
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
jquery实现数字输入框
2017/02/22 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python写的一个简单监控系统
2015/06/19 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
python Tensor和Array对比分析
2020/01/08 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
任意存:BOXFUL
2018/05/21 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
自我介绍演讲稿
2014/01/15 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
原告离婚代理词
2015/05/23 职场文书
同学会感言
2015/07/30 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang