2

我正在开发一个框架。我提供了一个基类,其他开发人员将对其进行子类化以向系统添加行为。这些类的实例将具有我的框架不一定期望的属性,除非通过检查这些实例' __dict__。为了让事情变得更有趣,其中一些类可以随时动态创建。

我希望框架处理一些事情,即我需要保留这些实例,向用户显示它们的属性值,并让她使用这些值搜索/过滤实例。

我必须使用关系数据库。我知道那里有一些不错的 python OO 数据库,但不幸的是,在这种情况下它们不是一个选项。

我也不是在寻找一个成熟的 ORM ......而且它甚至可能不是一个选项,因为某些类可以动态创建。

所以,我的问题是,我需要序列化 ​​python 实例的什么状态以确保以后可以反序列化它?看看就够了__dict__,还是我应该使用其他私有属性?

腌制实例是不够的,因为我需要解开它们以搜索/过滤属性值,而且我担心在内存中执行它的数据太多(而不是让数据库执行它)。

4

1 回答 1

1

只需使用 ORM。这就是他们的目的。

你打算做的是在你自己的时间创建你自己的半途而废的 ORM。为您自己的代码节省时间,并利用其他人免费为您解决此问题所付出的努力。

请注意,python 中的所有类创建都是“动态的”——这根本不是问题。事实上,如果您以编程方式组装类,使用 ORM 可能会稍微容易一些,因为它们提供了字段的具体化。

在最坏的情况下,如果您确实需要将对象存储在假的 nosql 类型的模式中,那么您仍然只需要在使用现有 ORM 的情况下编写自己的后端驱动程序,而不是自己编写整个堆栈。(碰巧,您不是第一个面对这个问题的人 - 存在解决方案。Goole“python orm 存储动态创建的模型”和“sqlalchemy 存储动态创建的模型”)

候选人包括:

  • Django ORM
  • SQL炼金术
  • 您可以通过谷歌搜索“Python ORM”找到其他一些内容。
于 2012-04-10T18:24:02.110 回答