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复制文件代码实现
Dec 23 Python
Python批量转换文件编码格式
May 17 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
PyQt实现界面翻转切换效果
Apr 20 Python
python验证码识别教程之滑动验证码
Jun 04 Python
Python Grid使用和布局详解
Jun 30 Python
python tkinter界面居中显示的方法
Oct 11 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
pytorch之添加BN的实现
Jan 06 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
python中print格式化输出的问题
Apr 16 Python
用Python实现Newton插值法
Apr 17 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 in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
JS+DIV实现拖动效果
2020/02/11 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
python实现封装得到virustotal扫描结果
2014/10/05 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python决策树之C4.5算法详解
2017/12/20 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
个人教师自我评价范文
2013/12/02 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
红色影片观后感
2015/06/18 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
python批量创建变量并赋值操作
2021/06/03 Python
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
Golang连接并操作MySQL
2022/04/14 MySQL
OpenFeign实现远程调用
2022/08/14 Java/Android