Skip to main content

Persistent compressed expiring dict in Python, backed up by sqlite3 and json

Project description

A lightweight wrapper around Python’s sqlite3 database with a MutableMapping interface:

from expiringsqlitedict import SqliteDict
with SqliteDict('./my_db.sqlite') as mydict:
    mydict['some_key'] = any_picklable_object
    print(mydict['some_key'])  # prints the new value
    for key, value in mydict.items():
        print((key, value))
    print(len(mydict)) # etc... all dict functions work

json is used internally by default to serialize the values. Keys are arbitrary strings, values arbitrary json-able objects. This must be used within a context manager, and serialization can be overridden with your own. The database is wrapped with a transaction, and any exception thrown out of the context manager rolls back all changes.

This was forked off of sqlitedict in order to add auto-expiring functionality, and initially was quite similar to it. Version 2.0 split of completely and takes the module into a complete rewrite, mostly to remove unnecessary Python 2 compatibility, simplify the API, completely enforce a context manager for typical cases, add full typing throughout, and use sqlite triggers for expiration cleanup.

Version 3 set the default encoding to json, and made many other API refinements.

This version also does not vacuum at all automatically. It did in previous versions, but this was kind of a silly behavior to put into the library itself. If you want your database file intermittently vacuumed, you should put such behavior into a crontab or use the sqlite3 module to do it yourself intermittently.

Features

  • Values can be any json-capable objects (this can be customized to be as flexible as you need, through custom serializers)

  • Support for access from multiple programs or threads, with locking fully managed by sqlite itself.

  • A very simple codebase that is easy to read, relying on sqlite for as much behavior as possible.

  • A simple autocommit wrapper (SimpleSqliteDict), if you really can’t handle a context manager and need something that fully handles like a dict. You can specify a isolation_level on this to have to commit and roll back yourself.

  • An on-demand wrapper (OnDemand), for situations where you want to open and close the database in as narrow a window as possible.

  • Support for custom serialization or compression:

import json

with SqliteDict('some.db', serializer=json) as mydict:
    mydict['some_key'] = some_json_encodable_object
    print(mydict['some_key'])

Installation

The module has no dependencies beyond Python itself.

Install or upgrade with:

pip install expiringsqlitedict

or from the source tar.gz:

python setup.py install

This module is a single file, so you could also easily import the module in your own tree, if your workflow needs that.

Testing

You may test this by running test.py with PYTHONPATH set to the current working directory. There is a convenience makefile to do this for you when you run:

make test

Documentation

Standard Python document strings are inside the module:

>>> import expiringsqlitedict
>>> help(expiringsqlitedict)

Comments, bug reports

expiringsqlitedict resides on github. You can file issues or pull requests there.


expiringsqlitedict is open source software released under the Apache 2.0 license. Version <2 Copyright (c) 2011-2018 Radim Řehůřek and contributors. All versions copyright (c) 2018-2022 Absolute Performance, Inc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

expiringsqlitedict-5.0.0.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

expiringsqlitedict-5.0.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file expiringsqlitedict-5.0.0.tar.gz.

File metadata

  • Download URL: expiringsqlitedict-5.0.0.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.2

File hashes

Hashes for expiringsqlitedict-5.0.0.tar.gz
Algorithm Hash digest
SHA256 5000e6303ba3482a8950e1a9f2100349f7287bc29f36e2bb7e99abefd9c80594
MD5 99f7c212c71aa9fcf15a4e08e31ed90c
BLAKE2b-256 8363eb3fc50735c4db054ae91db7b2e4d5a735bea9ffbac095e46efaed277de4

See more details on using hashes here.

File details

Details for the file expiringsqlitedict-5.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for expiringsqlitedict-5.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8f66a878407874e589ce78b7e4c3fbf12f2428ef2eb6a5b6dfc8e1d2d2283194
MD5 7681a93f79e7e982b7f7925e49a9f262
BLAKE2b-256 734b08e299bd0b7defaa2927a2831ae95247abe647e2ab71c272bcdef324d454

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page