如何获取对象数据库?

时间:2010-12-25 09:37:49

标签: python database object

有人可以推荐一个模块或者告诉我如何获取Python的对象数据库吗? 我对保存对象的数据库感兴趣的原因之一是因为我认为数据库可以提供比使用pickle更简单的代码。 在我的问题Saving an Object (Data persistence)中,有人使用pickle向我提供了一段代码,我认为应该有一种更简单的方法来保存对象。

4 个答案:

答案 0 :(得分:4)

如果代码的简单性是您主要关注的问题,pickle很难被击败。

基本上,为了保存对象data,您所要做的就是:

with open('data.pickle', 'w') as pickle_file:
    pickle.dump(data, pickle_file)

然后您可以通过以下方式取回:

with open('data.pickle') as pickle_file:
    data = pickle.load(pickle_file)  # You get the data back!

如果您需要保存自己的类中的对象,可能需要查看some technical details,但将对象保存到文件基本上与编写/阅读上面的代码!

答案 1 :(得分:3)

这是一个非常模糊的领域,因为你没有告诉你的要求是什么。根据您的具体需求,有不同的可能性。您可以在python index中搜索与数据库相关的产品。

存储和检索python对象,没有任何类型的查询,内存中的所有内容

我会使用pickle或json将对象存储并加载到磁盘上的单个文件中。

在/从关系数据库

存储和检索对象

python有很多Object relational mappers可用

按需加载和存储对象

python有一些“纯对象”数据库,如zopecog(不,我没有任何经验)。

修改

由于您明确表示您想要一个简单的解决方案,我希望第二个@EOL pickle是要使用的工具。

答案 2 :(得分:3)

ZODB是一个出色的对象数据库。设置需要一些工作,但这完全是值得的。

Pickle不是数据库,因此可以用来加载或保存数据,但不能将它们用作数据库,只能用作保存文件格式。

Shelve是一个原始的密钥数据存储。即,如果所有对象都有唯一键,则可以使用它,否则不能。

答案 3 :(得分:2)

以下是使用shelve模块的示例(我在评论中错误地将shelf模块称为Rudi的答案)。这是my answer之后的另一个问题的图案,因此您可以轻松地将其与使用其他答案中显示的pickle模块进行比较。

注意如何以不同的顺序检索对象,这些顺序与它们在数据库文件中的放置方式无关(由于架子中只有两个对象,因此恰好与该顺序相反)。

import shelve

class Company:
    def __init__(self, name, value):
        self.name = name
        self.value = value

comp_db = shelve.open('company_database', 'n')
comp_db['company1'] = Company('banana', 40)
comp_db['company2'] = Company('spam', 42)

# update entry
a_company = comp_db['company1']
a_company.name = 'egg' # change name
comp_db['company1'] = a_company # update db

comp_db.close()

comp_db = shelve.open('company_database')

company2 = comp_db['company2']
print company2.name
# spam
print company2.value
# 42

company1 = comp_db['company1']
print company1.name
# egg
print company1.value
# 40

comp_db.close()