shelve
documentation的選擇說:擱置:數據庫
其中數據庫包將被使用(如DBM,GDBM 或bsddb)取決於哪個接口是可用的選擇。
這是什麼意思?如何確定選擇哪個包?如何嚴格定義哪一個必須選擇?什麼數據庫實現最適合使用?
shelve
documentation的選擇說:擱置:數據庫
其中數據庫包將被使用(如DBM,GDBM 或bsddb)取決於哪個接口是可用的選擇。
這是什麼意思?如何確定選擇哪個包?如何嚴格定義哪一個必須選擇?什麼數據庫實現最適合使用?
在這裏找到:
http://www.gossamer-threads.com/lists/python/python/13891
import shelve
import gdbm
def gdbm_shelve(filename, flag="c"):
return shelve.Shelf(gdbm.open(filename, flag))
db = gdbm_shelve("dbfile")
PS
在鏈接頁面的人也發現了這個地方,但他的鏈接已經死了。
我想沒有辦法自己指定底層數據庫。 擱置使用anydbm和anydbm使用它試圖以下列順序將以下墊層實現中whichdb模塊
您可以使用擱置.BsdDbShelf子類擱置強制使用bsd * d * b實現。
如何確定選擇哪個包?
內置模塊whichdb
可用於此目的。例如:
In [34]: db = anydbm.open('test.db', 'c')
In [35]: db['test'] = '123'
In [36]: db.close()
In [37]: import whichdb
In [38]: dir(whichdb)
Out[38]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'_dbmerror',
'dbm',
'os',
'struct',
'sys',
'whichdb']
In [39]: whichdb.whichdb('test.db')
Out[39]: 'dbhash'
使用什麼數據庫實現最好?
約一些限制的shelve
模塊會談如果基礎DB引擎是dbm
(即,稱爲dbm
Python的模塊,該模塊使用Unix ndbm
或BSD DB或ndbm
的GNU GDBM兼容性接口的接口):
這意味着存儲在數據庫中的對象(醃製表示)應該相當小,並且在極少數情況下,重要衝突可能會導致數據庫拒絕更新。
目前尚不清楚這是否僅適用於ndbm
本身,或兼容性接口也是如此; 「相當小」的含義是多少;以及這些情況如何「罕見」。
其實,紅寶石,其中也有綁定DBM,有this to say:
原始的Berkeley DB被限制在2GB的數據。 Dbm庫有時還會限制鍵/值對的總大小,以及散列爲相同值的所有鍵的總大小。這些限制可能只有512個字節。也就是說,gdbm和Berkeley DB的最新版本取消了這些限制。
我假設這是沒有什麼可擔心的,因爲它是相當不可能的ndbm
將被使用,因爲擊中任何這些限制會(希望)拋出一個異常的描述,在這一點上,我們需要進一步亂七八糟。
那麼,如果使用'shelve.BsdDbShelf',你不需要'bsddbm'包可用? –