python中sqllite插入numpy数组到数据库的实现方法
作者:修炼之路 发布时间:2024-01-16 20:31:29
标签:python,numpy,数组,sqllite
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() # 关闭数据库
来源:https://blog.csdn.net/sinat_29957455/article/details/118027857


猜你喜欢
- 本文实例讲述了JavaScript实现计算圆周率到小数点后100位的方法。分享给大家供大家参考,具体如下:浮点数的有效数位是16位,我自己做
- Python输入在Python中,使用内置函数input()可以接收用户的键盘输入input()函数的基本用法如下:variable = i
- 在编写JavaScript程序时往往需要检测某一变量是否存在,这是一件非常简单的工作,但如果不细心也会遇到一些问题。主要有一些几点: 1、普
- 选择排序选择排序(selection sort)是一种原地(in-place)排序算法,适用于数据量较少的情况。由于选择操作是基于
- 本文实例对比分析了python中lambda与def的用法。分享给大家供大家参考。具体分析如下:1、lambda用来创建匿名函数,不同于de
- 预测结果转为numpy:logits=model(feature)#如果模型是跑在GPU上result=logits.data.cpu().
- 上传html文件内容如下:操作步骤<html><head><meta http-equiv="con
- 利用pygame实现了简易版飞机大战。源代码如下:# -*- coding:utf-8 -*-import pygameimport sys
- 本文将介绍在InterDev中实现网上商店购物车功能的方法,具体步骤如下:一、 数据库结构:产品数据表(Products): 存放产品信息产
- var getWindow = function(obj) { var&nbs
- 某人使用如下过滤代码,发现经常被黑:n=request.form("username") p=request.form(
- 前言我们在做微信小程序开发的过程中,总会遇到各种奇葩的问题。今天就把我在小程序开发过程中遇到的各种问题,及对应的解决方案总结在这里,方便以后
- 文 | 潮汐来源:Python 技术「ID: pythonall」学习Python是做数分析的最基础的一步,数据分析离不开数据可视
- 前言所谓模糊查询就是不需要用户完整的输入或者说全部输入信息即可提供查询服务,也就是用户可以在边输入的同时边看到提示的信息(其实是查询出来匹配
- 散点图什么是散点图?散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图, 散点图表示因变量随自变量而变化的大致趋势,
- 如何实现自定义一个异常python内置了许多异常类,为编写代码划定红线,才使调试代码时能及时发现错误。那么我们编写一个模块也可以为使用此模块
- PDOStatement::setAttributePDOStatement::setAttribute — 设置一个语句属性(PHP 5
- 玩QQ桌球游戏时,有时候用鼠标控制鼠标指针的微小移动比较费劲儿,所以想写个程序,可以用键盘的上下左右键来控制鼠标的移动,每次只移动一个像素。
- 前言Vscode是是一个强大的跨平台工具,我自己电脑是mac,公司电脑是win而且是内部环境,导致公司安装软件很费劲。好在vscode许多插
- JavaScript substr 方法substr 方法用于根据开始位置和长度截取字符串并返回截取部分字符串。其语法如下:str_obje