2015-09-09 1 views
0

Друг недавно показал мне, что вы можете создать экземпляр, который является подклассом dict в Python, а затем использовать этот экземпляр для сохранения, обновления и т. Д. Кажется, что у вас больше контроля, и это выглядит проще.Зачем использовать MongoAlchemy, если вы можете подклассифицировать 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) 

ответ

1

Автор здесь. Основная причина, по которой вы хотите использовать его (или одну из многих подобных библиотек), - для безопасности. Когда вы присваиваете значение MongoAlchemy Document, он проверяет чек, чтобы убедиться, что все указанные вами ограничения выполнены (например, тип, длина строк, числовые границы).

У него также есть запрос 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, которые вы не выполнили бы половину вставок. Поэтому он предотвращает конкретный и разумно распространенный тип ошибки

 Смежные вопросы

  • Нет связанных вопросов^_^