簡體   English   中英

使用 Python 中的 dbm 模塊 3

[英]Using the dbm module in Python 3

我正在學習 Python 3.1.3 中的數據庫文件和 dbm 模塊,並且在使用 Python 2 中的 anydbm 模塊中的一些方法時遇到了問題。

鍵方法工作正常,

import dbm

db = dbm.open('dbm', 'c')
db['modest'] = 'mouse'
db['dream'] = 'theater'

for key in db.keys():
    print(key)

產量:

b'modest'
b'dream'

但是項目和價值觀,

for k,v in db.items():
    print(k, v)

for val in db.values():
    print(val)

出現 AttributeError: '_dbm.dbm' object has no attribute 'items'。

另外,這個:

for key in db:
    print(key)

得到一個 TypeError: '_dbm.dbm' object is not iterable。

這些方法在 Python 3 的 dbm 模塊中不起作用嗎? 如果這是真的,我還有什么可以代替的嗎?

我認為這取決於它選擇使用哪種實現。 在我的系統上,Python 3 中的 dbm 選擇使用 ndbm,這相當於 Python 2 中的dbm模塊。當我明確使用該模塊時,我看到了相同的限制。

Python 2 中出現anydbm 選擇dumbdbm,速度較慢,但確實支持全字典接口。

您可能想查看 Python 2 和 3 中的shelve模塊,它在這些接口上添加了另一層(允許您存儲任何可腌制對象)。

這些簡單數據庫的目的是充當鍵/值存儲。 如果您想要所有值,則必須遍歷所有鍵。 IE:

values = [db[key] for key in db.keys()]

那不會很快。 我可能認為這種鍵/值存儲並不是您真正需要的。 也許 SQLite 會更好?

也就是說,您可以在 Python 3 中以 dbm.dumb 的名稱訪問dumbdbm。

>>> import dbm
>>> db = dbm.dumb.open('dbm', 'c')
>>> 
>>> db['modest'] = 'mouse'
>>> db['dream'] = 'theater'
>>> for key in db.keys():
...     print(key)
... 
b'modest'
b'dream'
>>> for k,v in db.items():
...     print(k, v)
... 
b'modest' b'mouse'
b'dream' b'theater'
>>> for val in db.values():
...     print(val)
... 
b'mouse'
b'theater'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM