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

作者在这里。您想要使用它(或许多类似库之一)的一般原因是为了安全。当您为 MongoAlchemy 文档分配值时,它会进行检查以确保满足您指定的所有约束(例如类型、字符串长度、数字范围)。

它还有一个查询 DSL,它比类 json 的内置语法更易于使用。这是文档中的一个示例:

>>> 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

这并不意味着这些插入是一个原子操作——或者甚至所有写入都会成功——但这确实意味着如果您的应用程序在“do_stuff”函数中有错误,您将不会完成一半的插入. 因此它可以防止特定且合理常见的错误类型

于 2015-09-09T13:10:36.843 回答