python中sqllite插入numpy数组到数据库的实现方法
作者:修炼之路 时间:2024-01-16 20:31:29
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
标签:python,numpy,数组,sqllite
0
投稿
猜你喜欢
教你用Python写一个植物大战僵尸小游戏
2021-07-19 22:59:37
python 如何将数据写入本地txt文本文件的实现方法
2021-05-02 14:11:52
python实现批处理文件
2022-08-14 19:27:46
一直闪烁变色的超级链接代码
2008-02-27 13:08:00
PHP htmlspecialchars()函数用法与实例讲解
2023-06-02 16:48:38
一文教你学会定位线上MySQL锁超时问题
2024-01-22 13:19:45
Pyecharts 动态地图 geo()和map()的安装与用法详解
2023-08-16 17:07:34
golang中net的tcp服务使用
2023-08-30 10:54:14
ITK 实现多张图像转成单个nii.gz或mha文件案例
2023-02-18 20:39:51
基于 Mysql 实现一个简易版搜索引擎
2024-01-25 02:00:38
python目标检测IOU的概念与示例
2022-04-19 07:41:25
Python爬虫获取基金净值信息详情
2022-04-23 07:53:42
Babylon使用麦克风并处理常见问题解决
2024-04-29 13:25:53
Python自动化之定位方法大杀器xpath
2023-11-22 05:08:57
HTML中使背景图片自适应浏览器大小实例详解
2024-05-02 16:18:32
python递归调用中的坑:打印有值, 返回却None
2023-11-02 23:07:42
Dreamweaver的CSS布局ul和li范例
2009-08-28 12:34:00
ThinkPHP视图查询详解
2024-05-03 15:52:08
用SQL语句查询数据库中某一字段下相同值的记录方法
2024-01-23 14:49:54
echarts图表设置宽度100%结果为100px的解决办法
2024-04-18 09:50:19