Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

persistentdicts

Build Status Coverage Status License Supported Python versions

dict-like interfaces for various databases

Key differences with competing projects

If you search on pypi, you will find a few competing projects: pdicts, durabledicts, etc. The key differences between persistentdicts and those are:

  • Implementations of persistentdicts do not keep a local cache dictionary: changes are immediately written to database. Iterators are also proceeding directly on the database. It allows to interact with datasets that would not fit in RAM otherwise.

  • The test suite is significantly bigger than in all the other implementation I have seen. When relevant, tests have been backported from the CPython test suite of dict.

  • Serialization is done in json rather than using pickle.

Gotchas

You can’t modify a value of the dictionary in place. For example:

>>> import persistentdicts

>>> d = persistentdicts.sqlitedict.SqliteDict()
>>> d["a"] = []
>>> d["a"].append(1)

>>> d["a"] # with a normal dict, you would get [1]
[]

That is because d["a"] returns a copy of the database entry for the key "a", and not a reference to a python object. Modifying this copy (with append) does not affect the database itself.

To circumvent this, you should do:

>>> import persistentdicts

>>> d = persistentdicts.sqlitedict.SqliteDict()
>>> d["a"] = []
>>> d["a"] = d["a"] + [1]

>>> d["a"]
[1]

Similarly, setdefault will not work as expected since it does not return a reference to the stored value, but a copy of this value.

>>> import persistentdicts

>>> d = persistentdicts.sqlitedict.SqliteDict()
>>> d.setdefault("a", []).append(1)

>>> d["a"]
[]

Databases supported so far

Done:

  • kyotocabinet

  • sqlite

  • cassandra

Planned:

  • leveldb

  • redis

  • memcachedb

  • lightcloud

You can request new formats on the bug tracker.

Short documentation

persistentdicts.sqlitedict.SqliteDict

persistentdicts.sqlitedict.SqliteDict(path=":memory:", table="dict", isolation_level="DEFERRED", *args, **kwargs)
  • path is the path to the file where you wish to store the data

  • dict is the table to use in this file

  • isolation_level is the isolation level used for all transactions. See the sqlite documentation for more details.

  • the remaining arguments *args, **kwargs are used to fill the dictionary (like a normal dict)

persistentdicts.kyotocabinetdict.KyotoCabinetDict

persistentdicts.kyotocabinetdict.KyotoCabinetDict(path, *args, **kwargs)
  • path is the path to the file where you wish to store the data. The file extension matters and will determine which format is going to be used internally (must be one of .kch, .kct, .kcd, .kcf or .kcx). See the kyotocabinet documentation for more details.

  • the remaining arguments *args, **kwargs are used to fill the dictionary (like a normal dict)

persistentdicts.cassandradict.CassandraDict

persistentdicts.cassandradict.CassandraDict(contact_points=("127.0.0.1",), port=9042, keyspace="dict", table="dict", *args, **kwargs)
  • contact_points is an initial list of ip addresses which are part of the Cassandra cluster. The Cassandra driver will automatically discover the rest of the cluster.

  • port is the port on which Cassandra runs.

  • keyspace is the keyspace used to store the data. This keyspace will be deleted if the method .delete() is called on the CassandraDict

  • table is the name of the table used to store the data.

  • the remaining arguments *args, **kwargs are used to fill the dictionary (like a normal dict)

Metadata

Release files for persistentdicts-dev 2.0.4.dev2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for persistentdicts-dev 2.0.4.dev2
File Size Uploaded Provenance Actions
persistentdicts-dev-2.0.4.dev2.tar.gz 7.3 kB Without provenance Details for persistentdicts-dev-2.0.4.dev2.tar.gz

Release files / persistentdicts-dev-2.0.4.dev2.tar.gz

Download URL persistentdicts-dev-2.0.4.dev2.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
2dde7d4eab2d0ee13448feb647ec1df2c5bd1fce6e5757f76910314bff76ff51
BLAKE2b-256 checksum
How to use checksums
305618d32c35102873adf5942fe9042a5a998d172e702b27a0797b3e75b91e25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for persistentdicts-dev 2.0.4.dev2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.3.dev3

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page