首页 > 解决方案 > 如何在 lmdb 中正确插入重复键?

问题描述

根据文档(https://lmdb.readthedocs.org/en/release/),传递dupsortopen_db()应该允许将重复的键添加到 lmdb 数据库中。但情况似乎并非如此,它仍在覆盖这些值,除非我读错了文档。

env = lmdb.open(path.join(directory, 'lmdb'), map_size=map_size)
db = env.open_db(dupsort=True)

with env.begin(db=db, write=True) as transaction:
    transaction.put(b'mykey', b'value1')
    transaction.put(b'mykey', b'value2')
    transaction.put(b'mykey', b'value3')

但是,当我遍历键值时,它只显示最后一个值“value3”。

cursor = transaction.cursor()
for key, value in cursor.iternext(True, True):
    print(key, value)

iternext_dup()似乎也没有打印出预期值。我也试过cursor.next()了,它只返回True一次,另外transaction.stat()显示entries: 1.

标签: pythonlmdb

解决方案


签出 iternext_dup(keys=False, values=True) 方法

从文档中,

返回一个前向迭代器,它在调用 next_dup() 之前产生当前键的当前值(“重复”),重复直到达到当前键的最后一个值。

仅对使用 dupsort=True 打开的数据库有意义。


推荐阅读