python lmdb使用

来源:互联网 发布:德尔康尼骨科知乎 编辑:程序博客网 时间:2024/05/21 14:01

http://www.jianshu.com/p/66496c8726a1

4.1 准备

学习LMDB的时候不禁想到知乎上的提问“有哪些名人长期生活在其他名人的光环下”,说实话感觉查它的人基本都是为了用Caffe……

Anyway,LMDB和SQLite/MySQL等关系型数据库不同,属于key-value数据库(把LMDB想成dict会比较容易理解),键key与值value都是字符串。

安装:

pip install lmdb

使用时import lmdb。

4.2 操作流程

概况地讲,操作LMDB的流程是:

  • 通过env = lmdb.open()打开环境
  • 通过txn = env.begin()建立事务
  • 通过txn.put(key, value)进行插入和修改
  • 通过txn.delete(key)进行删除
  • 通过txn.get(key)进行查询
  • 通过txn.cursor()进行遍历
  • 通过txn.commit()提交更改

4.3 操作实例

4.3.1 建立环境

#!/usr/bin/env pythonimport lmdbenv = lmdb.open("students");

运行一下,查看当前目录的变化:


set_env.py

可以看到当前目录下多了students目录,里面有data.mdb和lock.mdb两个文件。

4.3.2 插入、删除、修改

插入与修改都用put实现,删除用delete实现。

#!/usr/bin/env pythonimport lmdbenv = lmdb.open("students");txn = env.begin(write = True);txn.put(str(1), "Alice");txn.put(str(2), "Bob");txn.put(str(3), "Peter");txn.delete(str(1));txn.put(str(3), "Mark");txn.commit();

注意用txn = env.begin()创建事务时,有write = True才能够写数据库。

4.3.3 查询

查单条记录用get(key),遍历数据库用cursor。

直接在上面的代码commit()之后加上:

txn = env.begin();print txn.get(str(2));for key, value in txn.cursor():    print (key, value);

运行一下,输出结果为:


test_query.py

注意上次commit()之后要用env.begin()更新txn。

4.3.4 完整的例子

#!/usr/bin/env pythonimport lmdbimport os, sysdef initialize():    env = lmdb.open("students");    return env;def insert(env, sid, name):    txn = env.begin(write = True);    txn.put(str(sid), name);    txn.commit();def delete(env, sid):    txn = env.begin(write = True);    txn.delete(str(sid));    txn.commit();def update(env, sid, name):    txn = env.begin(write = True);    txn.put(str(sid), name);    txn.commit();def search(env, sid):    txn = env.begin();    name = txn.get(str(sid));    return name;def display(env):    txn = env.begin();    cur = txn.cursor();    for key, value in cur:        print (key, value);env = initialize();print "Insert 3 records."insert(env, 1, "Alice");insert(env, 2, "Bob");insert(env, 3, "Peter");display(env);print "Delete the record where sid = 1."delete(env, 1);display(env);print "Update the record where sid = 3."update(env, 3, "Mark");display(env);print "Get the name of student whose sid = 3."name = search(env, 3);print name;env.close();os.system("rm -r students");

运行一下,输出结果为:


0 0
原创粉丝点击