Python:在数据库中存储对象状态的最佳方法?

问题描述:

我需要将实例(或至少它们的状态)存储在数据库中。这个想法是,我应该能够按需重新创建实例。由于我定义了类,我可以选择我想要如何存储数据。Python:在数据库中存储对象状态的最佳方法?

请看下面的图,继承图:

    A 
       /\ 
        B C 
       /\ /\ 
       D E F ... 

的想法是,该实例可以属于任何类和它本身可以存储其他对象(即我已经完全设计控制权)。

我的第一个想法是将状态专门存储在字典中,将字典转储为json并将其存储在数据库中。在运行时,从数据库加载json将其转换为字典,创建一个对象传递字典,得到的设置等等...

我不知道如果这是一个好方法,并且如果有还有其他可能会出现的问题。我已经遇到一个,如果你使用myobj.dict,你实际上并没有得到所有班级的父母的属性,但...

有什么建议吗?

+2

它是否必须是数据库?一个简单的愚蠢的解决方案是把它们腌到一个文件。 – Daenyth

+0

http://www.python.org/workshops/1997-10/proceedings/shprentz.html –

+2

http://docs.python.org/library/shelve.html –

有几种方法。我真的不认为我们可以通过您提供的信息告诉您最适合您的方式。

这些都是我能想到的办法。只有你可以确定哪一个最符合你的要求和意图。

+0

这是一个很好的答案。它还应该提到*搁置*,其具有接近于零的学习曲线并且包含在标准库中(不需要安装第三方模块)。 –

+0

@RaymondHettinger - 你是对的。我想我认为它是第三种选择的一部分,但我会编辑它以反映*搁置*,谢谢。 – gomad

+0

我结束了与zodb为我的需要,尽管搁置可能会起作用,但似乎并不适用于非常大的数据集。 – noobzie

我的建议是围绕你的状态设计一个对象模型,并使用Python的ORM工具包。在这里提到几个 - What are some good Python ORM solutions?

我相信它不是最好的重新发明车轮。您可以使用ORM工具箱来存储状态或实际的对象实例树本身。

shelve module是存储通过密钥检索实例的最简单方法。它会自动为你清理和取消,并负责读取和写入文件。