python-lmdb

simple lmdb bindings written using ctypes


License
MIT
Install
pip install python-lmdb==1.0.0b1

Documentation

python-lmdb

Your (L)MDB bindings for Python, written entirely using ctypes, but only for Python 3 (at the moment). Does not use any CPython native extensions.

Usage

import lmdb
lib = lmdb.LibLMDB()
env = lmdb.Environment(lib, "data")
with env.transaction() as txn:
    txn[b"key"] = b"value"
    print(txn[b"key"])
    del txn[b"key"]

Web API

I have implemented a simple web REST API with Bottle. It supports simple transactions, setting an item, getting an item, and deleting an item.

$ gunicorn lmdb.web

You can use the following environment variables to configure the application:

  • LMDB_WEB_LIB: Path to liblmdb.so
  • LMDB_WEB_DBPATH: Path to database directory

It supports simple REST endpoints:

  • GET / Server status overview
  • GET /_simple/<key> Retrievement of item by key
  • PUT /_simple/<key> Set an item with request body
  • DELETE /_simple/<key> Delete an item
  • POST /_trans Upload transaction and execute it
  • GET /_dump Return transaction which inserts data

Transactions are uploaded as JSON with the following form:

{
    "write": true, # optional, by default false
    "steps": [
        {"action": "set", "key": "foo", "value": "bar"},
        {"action": "delete", "key": "foo"},
    ]
}