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教程之全局变量用法
Jun 27 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python反射用法实例简析
Dec 22 Python
opencv python 图像去噪的实现方法
Aug 31 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
如何基于python把文字图片写入word文档
Jul 31 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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环境――Appserv
2006/12/13 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
js读取配置文件自写
2014/02/11 Javascript
用console.table()调试javascript
2014/09/04 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
Python处理Excel文件实例代码
2017/06/20 Python
python 5个顶级异步框架推荐
2020/09/09 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
人事部主管岗位职责
2013/12/26 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
节能标语大全
2014/06/21 职场文书
法制教育演讲稿
2014/09/10 职场文书
借条如何写
2015/05/26 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python