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中Collection的使用小技巧
Aug 18 Python
python操作字典类型的常用方法(推荐)
May 16 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
Python中的asyncio代码详解
Jun 10 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
pandas中ix的使用详细讲解
Mar 09 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
python pymysql库的常用操作
Oct 16 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 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
德生PL330测评
2021/03/02 无线电
输出控制类
2006/10/09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
详解PHP数组赋值方法
2015/11/07 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
详解Python中第三方库Faker
2020/09/25 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
本科生学习总结的自我评价
2013/10/02 职场文书
面试后的英文感谢信
2014/02/01 职场文书
和谐社区口号
2014/06/19 职场文书
Python中的套接字编程是什么?
2021/06/21 Python