0

最近、友人が、Python で dict のサブクラスであるインスタンスを作成し、そのインスタンスを使用して保存、更新などを行うことができることを教えてくれました。

class Marker(dict):

  def __init__(self, username, email=None):
      self.username = username
      if email:
         self.email = email
  @property
  def username(self):
      return self.get('username')
  @username.setter
  def username(self, val):
      self['username'] = val
  def save(self):
      db.collection.save(self)
4

1 に答える 1

1

作者はこちら。それ (または多くの同様のライブラリの 1 つ) を使用する一般的な理由は、安全のためです。MongoAlchemy ドキュメントに値を割り当てると、指定したすべての制約 (型、文字列の長さ、数値の境界など) が満たされていることを確認するためのチェックが行われます。

また、json に似た組み込み構文よりも使いやすいクエリ DSL もあります。ドキュメントの例を次に示します。

>>> query = session.query(BloodDonor)
>>> for donor in query.filter(BloodDonor.first_name == 'Jeff', BloodDonor.age < 30):
>>>    print donor
Jeff Jenkins (male; Age: 28; Type: O+)

MongoAlchemy Session オブジェクトを使用すると、トランザクションをシミュレートすることもできます。

with session:
    do_stuff()
    session.insert(doc1)
    do_more_stuff()
    session.insert(doc2)
    do_even_more_stuff()
    session.insert(doc3)
    # note that at this point nothing has been inserted
# now things are inserted

これは、これらの挿入が 1 つのアトミック操作であること、またはすべての書き込みが成功することを意味するわけではありませんが、アプリケーションの「do_stuff」関数にエラーがある場合、挿入の半分を実行していないことを意味します。 . したがって、特定の合理的に一般的なタイプのエラーを防ぎます

于 2015-09-09T13:10:36.843 に答える