为什么不将数据写入数据库? (DBM,Python 3.2)

时间:2012-05-09 21:52:40

标签: python database python-3.x dbm

我一直在努力学习pickledbm python模块。我编写了一些连接到dbm数据库并编写数据和pickle信息的代码。

import dbm
import pickle
class PickleDB:
    def set_dbname(self):
        self.db = dbm.open("pickle", "n")
    def get_data(self):
        self.raw_data = input("Enter your raw data")
        self.pickled_data = pickle.dumps(self.raw_data)
    def write_to_db(self):
        self.db["Raw"] = self.raw_data
        self.db["Pickled"] = self.pickled_data
pickled_db = PickleDB()
pickled_db.set_dbname()
pickled_db.get_data()
pickled_db.write_to_db()

运行程序时一切正常,但是当我尝试访问数据库时会出现问题。钥匙不可用。

>>> db = dbm.open("pickle", "n")
>>> db["Raw"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Raw'
>>>  db.keys()
[]

这是为什么?为什么数据没有写入数据库?

1 个答案:

答案 0 :(得分:0)

问题在于,当您使用选项'n'打开数据库时,会清除数据库。来自pydoc dbm

  

'n'始终创建一个新数据库。

您可能需要查看shelve package。如果我理解你正在努力做的事情,“搁置”已经为你做了。