python读写LMDB文件的方法


Posted in Python onJuly 02, 2018

LMDB的全称是Lightning Memory-Mapped Database(快如闪电的内存映射数据库),它的文件结构简单,包含一个数据文件和一个锁文件:

python读写LMDB文件的方法

LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可。

让系统访问大量小文件的开销很大,而LMDB使用内存映射的方式访问文件,使得文件内寻址的开销非常小,使用指针运算就能实现。数据库单文件还能减少数据集复制/传输过程的开销。

在python中使用lmdb: linux中,可以使用指令‘pip install lmdb' 安装lmdb包。

1. 生成一个空的lmdb数据库文件

# -*- coding: utf-8 -*- 
import lmdb 
 
# 如果train文件夹下没有data.mbd或lock.mdb文件,则会生成一个空的,如果有,不会覆盖 
# map_size定义最大储存容量,单位是kb,以下定义1TB容量 
env = lmdb.open("./train",map_size=1099511627776) 
env.close()

2. LMDB数据的添加、修改、删除

# -*- coding: utf-8 -*- 
import lmdb 
 
# map_size定义最大储存容量,单位是kb,以下定义1TB容量 
env = lmdb.open("./train", map_size=1099511627776) 
 
txn = env.begin(write=True) 
 
# 添加数据和键值 
txn.put(key = '1', value = 'aaa') 
txn.put(key = '2', value = 'bbb') 
txn.put(key = '3', value = 'ccc') 
 
# 通过键值删除数据 
txn.delete(key = '1') 
 
# 修改数据 
txn.put(key = '3', value = 'ddd') 
 
# 通过commit()函数提交更改 
txn.commit() 
env.close()

3. 查询lmdb数据库内容

# -*- coding: utf-8 -*- 
import lmdb 
 
env = lmdb.open("./train") 
 
# 参数write设置为True才可以写入 
txn = env.begin(write=True) 
############################################添加、修改、删除数据 
 
# 添加数据和键值 
txn.put(key = '1', value = 'aaa') 
txn.put(key = '2', value = 'bbb') 
txn.put(key = '3', value = 'ccc') 
 
# 通过键值删除数据 
txn.delete(key = '1') 
 
# 修改数据 
txn.put(key = '3', value = 'ddd') 
 
# 通过commit()函数提交更改 
txn.commit() 
############################################查询lmdb数据 
txn = env.begin() 
 
# get函数通过键值查询数据 
print txn.get(str(2)) 
 
# 通过cursor()遍历所有数据和键值 
for key, value in txn.cursor(): 
  print (key, value) 
   
############################################ 
 
env.close()

4. 读取已有.mdb文件内容

# -*- coding: utf-8 -*- 
import lmdb 
 
env_db = lmdb.Environment('trainC') 
# env_db = lmdb.open("./trainC") 
 
txn = env_db.begin() 
 
# get函数通过键值查询数据,如果要查询的键值没有对应数据,则输出None 
print txn.get(str(200)) 
 
for key, value in txn.cursor(): #遍历 
  print (key, value) 
 
env_db.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
对numpy中的数组条件筛选功能详解
Jul 02 #Python
python matlibplot绘制多条曲线图
Feb 19 #Python
python matlibplot绘制3D图形
Jul 02 #Python
对numpy Array [: ,] 的取值方法详解
Jul 02 #Python
Python使用itertools模块实现排列组合功能示例
Jul 02 #Python
python绘制立方体的方法
Jul 02 #Python
python numpy 一维数组转变为多维数组的实例
Jul 02 #Python
You might like
PHP高级OOP技术演示
2009/08/27 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
CURL状态码列表(详细)
2013/06/27 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
用javascript操作xml
2006/11/04 Javascript
JavaScript高级程序设计
2006/12/29 Javascript
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Python中的Numpy矩阵操作
2018/08/12 Python
python实现网页自动签到功能
2019/01/21 Python
Python小进度条显示代码
2019/03/05 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
写给女生的道歉信
2014/01/08 职场文书
淘宝好评语句大全
2014/12/31 职场文书
助学金感谢信
2015/01/20 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js