[英]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.