各种数据库的类dict接口
persistentdicts的Python项目详细描述
与竞争项目的关键区别
如果你在pypi上搜索,你会发现一些竞争项目:pdicts, durabledict等。persistendict和那些 是:
- persistendict的实现不保留本地缓存 字典:更改将立即写入数据库。遍历器 也直接在数据库上进行。它允许交互 数据集不适合RAM。
- 测试套件比所有其他测试套件都要大得多 我看到的实现。如果相关的话,测试已经被移植 来自dict的cpython测试套件。
- 序列化是在json中完成的,而不是使用pickle。
有问题
不能就地修改词典的值。例如:
>>> import persistentdicts >>> d = persistentdicts.sqlitedict.SqliteDict() >>> d["a"] = [] >>> d["a"].append(1) >>> d["a"] # with a normal dict, you would get [1] []
这是因为d["a"]返回 键"a",而不是对python对象的引用。修改此副本 (使用append)不会影响数据库本身。
为了避免这种情况,您应该这样做:
>>> import persistentdicts >>> d = persistentdicts.sqlitedict.SqliteDict() >>> d["a"] = [] >>> d["a"] = d["a"] + [1] >>> d["a"] [1]
类似地,setdefault也不会按预期工作,因为它不会 返回对存储值的引用,但返回此值的副本。
>>> import persistentdicts >>> d = persistentdicts.sqlitedict.SqliteDict() >>> d.setdefault("a", []).append(1) >>> d["a"] []
简短文档
persistentdicts.sqlitedict.sqlitedict
persistentdicts.sqlitedict.SqliteDict(path=":memory:", table="dict", isolation_level="DEFERRED", *args, **kwargs)
- path是要存储数据的文件的路径
- dict是要在此文件中使用的表
- isolation_level是用于所有事务的隔离级别。 见sqlite documentation 更多细节。
- 剩余的参数*args, **kwargs用于填充 字典(像普通的dict)
持久性dicts.kyotocabinetdict.kyotocabinetdict
persistentdicts.kyotocabinetdict.KyotoCabinetDict(path, *args, **kwargs)
- path是要存储数据的文件的路径。 文件扩展名很重要,它将决定使用哪种格式 内部使用(必须是.kch、.kct、.kcd、.kcf或 .kcx)。见kyotocabinet documentation 更多细节。
- 剩余的参数*args, **kwargs用于填充 字典(像普通的dict)
持续dicts.cassandradict.cassandradict
persistentdicts.cassandradict.CassandraDict(contact_points=("127.0.0.1",), port=9042, keyspace="dict", table="dict", *args, **kwargs)
- contact_points是IP地址的初始列表,这些地址是 卡桑德拉星系团。卡桑德拉司机会自动发现 集群的其余部分。
- port是卡桑德拉运行的端口。
- keyspace是用于存储数据的键空间。这个键空间将 如果在cassandradict上调用方法.delete(),则被删除
- table是用于存储数据的表的名称。
- 剩余的参数*args, **kwargs用于填充 字典(像普通的dict)