2

私はある種のフレームワークを開発しています。システムに動作を追加するために他の開発者によってサブクラス化される基本クラスを提供しています。これらのクラスのインスタンスには、それらのインスタンスの__dict__. さらに興味深いことに、これらのクラスの一部は、いつでも動的に作成できます。

フレームワークでいくつかのことを処理したいと思います。つまり、これらのインスタンスを永続化し、それらの属性値をユーザーに表示し、それらの値を使用してインスタンスを検索/フィルター処理できるようにする必要があります。

リレーショナル データベースを使用する必要があります。そこにはまともなpython OOデータベースがいくつかあることは知っていますが、残念ながら、この場合はオプションではありません。

私も本格的な ORM を探しているわけではありません...そして、いくつかのクラスを動的に作成できることを考えると、オプションでさえないかもしれません。

それで、私の質問は、後でデシリアライズできるようにするために、Python インスタンスのどの状態をシリアライズする必要があるかということです。を見るだけで十分__dict__ですか、それとも使用すべき他のプライベート属性はありますか?

属性値を検索/フィルタリングするには、インスタンスを unpickle する必要があるため、インスタンスを pickle 化するだけでは十分ではありません。データが多すぎてメモリ内で (データベースに実行させるのではなく) 実行できないのではないかと心配しています。

4

1 に答える 1

1

ORMを使用するだけです。これが彼らの目的です。

あなたが提案しているのは、自分の時間に自分の中途半端な ORM を作成することです。物事を行う独自のコードに時間を節約し、他の人が無料でこの問題を解決するために費やした労力を使用してください。

Python でのすべてのクラス作成は「動的」であることに注意してください。これは問題ではありません。実際、プログラムでクラスをアセンブルする場合、フィールドの具体化を提供する ORM を使用した方がおそらく多少簡単です。

最悪の場合、オブジェクトを偽の nosql タイプのスキーマに格納する必要がある場合でも、既存の ORM を使用する場合は、スタック全体を自分でコーディングするのではなく、独自のバックエンド ドライバーを作成するだけで済みます。(たまたま、これに直面したのはあなたが初めてではありません。解決策は存在します。Goole の「python orm store dynamic created models」および「sqlalchemy store dynamic created models」)

候補者は次のとおりです。

  • ジャンゴ ORM
  • SQL錬金術
  • 「Python ORM」をグーグルで検索すると、他にもいくつか見つかります。
于 2012-04-10T18:24:02.110 に答える