micromongo є крихітний шар навколо PyMongo, що дозволяє створювати прості класи ORM-стиль, який може виконати перевірку, дозволяють точка доступу до документів, авто-обгортання результатів QuerySet, і дасть вам Pre / Post економії гачків.
Вона розроблена з microframeworks на увазі, але цей додаток і база агностиком. Вона призначена для спрощення використання PyMongo і надає інструменти для ідіоми, щоб не ускладнювати PyMongo або MongoDB з ваших структур даних.
Ви можете відкрити питання або посилати запити на витягування GitHub micromongo в
micromongo робить кілька проектних рішень, ім'я спрощення, які можуть не працювати для вас:
І NBSP; - & NBSP; micromongo підтримує єдину глобальну зв'язок, так що ви не можете є моделі, які підключаються до декількох серверів MongoDB
І NBSP; - & NBSP; Є Handfull з назви моделей та імен атрибутів документів, які не будуть працювати з моделями micromongo; Вони будуть розглянуті в повному обсязі документи
І NBSP; - & NBSP; ви можете мати тільки одну модель за колекції
Початок роботи
Для початку з micromongo, просто імпортувати його:
>>> Від імпорту micromongo підключення, Модель
>>> C = підключення ()
Підключіть приймає ті ж аргументи, що і об'єкт Connection PyMongo, а веде себе майже однаково, за винятком того, що намагається автоматично повертати результати запиту, загорнуті у відповідних класах моделі. Об'єкт підключення, який ви створюєте за допомогою цього виклику буде кешуватися і використовуватися в різних об'єктів ORM-стиль, як Model.save (), Model.proxy і т.д. Якщо ви хочете чистий, стандартний об'єкт Connection, ви можете отримати один легко :
>>> Від micromongo clean_connection імпорту
>>> Чистий = clean_connection ()
Зверніть увагу, що clean_connection не приймають аргументи і завжди повертає чисту клас зв'язку з тими ж настройками, як поточного з'єднання micromongo.
За допомогою цих об'єктів підключення, ви можете створити бази даних або робити все, що ви б з нормальними об'єктів PyMongo:
>>> ДБ = c.test_db
>>> Кількість = db.test_collection
>>> Collection.save ({"DocId": 1, "провал": Брехня})
>>> Collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail ": Брехня, u'docid": 1}
Ви також можете оголосити свою власну модель для конкретної колекції в декларативному стилі:
>>> Класу TestModel (модель):
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; кол-во = 'test_db.test_collection "
>>> Collection.find_one ()
Ці класи мають ряд додаткових функцій над словником, який може зробити їх набагато більш зручним у використанні. Ключі документів всі вони доступні в якості атрибутів:
>>> Т = collection.find_one ()
>>> T.fail
Помилковий
>>> T.docid
1
Ці документи також легко зберігається в базі даних:
>>> T.docid = 17
>>> T.save ()
>>> Clean.test_db.test_collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail ": Брехня, u'docid": 17}
Визначення моделі
Вище атрибут колекція була передана нашої моделі Foo. Це було ярлик, хоча; Якщо база даних і колекція призначаються окремо, модель може з'ясувати повне ім'я колекції. Якщо збір та бази даних немає, micromongo намагається з'ясувати це, грунтуючись на імені класу і модуля вашої моделі. Наприклад, blog.Post стане blog.post або stream.StreamEntry стане stream.stream_entry. Явне краще, ніж неявне, і це обнадіює те, що ви встановите колекцію вручну.
Крім того, упаковка і розпакування результати з бази даних, моделі можуть також визначити специфікацію документ, який може визначити значення за замовчуванням і виконувати перевірку перед збереженням моделі. Візьміть тривіальне блог пост модель:
>>> Від micromongo.spec імпорту *
>>> Класу Post (модель):
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; кол-во = 'test_db.blog_posts "
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Spec = DICT (
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Автор = польових умовах (= True, за замовчуванням = 'jmoiron ", тип = basestring),
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; назва = польових умовах (= False, за замовчуванням = '', тип = basestring),
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; опубліковані = польових умовах (= True, значення за замовчуванням = False, тип = [True, False]),
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; Тіло = Поле (тип = Unicode),
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; мітка = Поле (),
І NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; )
>>> Р = Post.new ()
>>> Р
<Повідомлення: {"назва": U '', 'автор': u'jmoiron ',' опублікувала ': FALSE}>
Кілька речей, які тут відбувається. Поля, які за умовчанням мають инициализируются, що дефолт, чи потрібне вони чи ні. Якщо обов'язкове поле не має значення за замовчуванням, це ініціалізувати Ні.
Поля можуть брати аргумент типу, який може бути або відкликані, що бере значення і повертає істину або брехня, один або декілька базових типів, один або більше значень. Якщо один або більше типів передбачені, isinstance використовується для перевірки, що значення правильного типу. Якщо один або кілька значень передбачені, поле діє як тип перерахування, перевірки того, що значення в наборі значень. Якщо тип не вказаний, перевірка завжди проходить на поле, якщо це не потрібно, і відсутні.
Якщо поле в р дається невірний тип, то ValueError піднімається:
>>> P.title = 10
>>> P.SAVE ()
Traceback (останній виклик останнього):
І NBSP; ...
ValueError: Ключі не відповідає специфікації: ['назва']
>>> Дель p.author
>>> P.SAVE ()
Traceback (останній виклик останнього):
І NBSP; ...
ValueError: відсутні поля: ['автор'] Недійсні поля: ['назва']
>>> P.title = 'Моя перша блогпост'
>>> P.author = 'jmoiron "
>>> P.published = True
>>> P.body = U "Це мій перший пост в блозі .. & NBSP; я так схвильована!"
>>> P.SAVE ()
Model.find
Для зручності і сухий, Model.find є classmethod, який буде використовувати курсор micromongo про видачу знахідку від правої колекції. Цей метод поводиться точно так само, як і Collection.find PyMongo-х років.
злегка модифікований клас micromongo в Курсор також робить Django надихнув метод order_by доступною для всіх курсорів (знайти і все, що ви ланцюг, якби вона повертає курсор). Ви можете передати один або більше імен полів, з необов'язкового "-", щоб впорядкувати речі за зростанням або спаданням.
Ці зміни дозволяють використовувати більшу частину потужності PyMongo без необхідності імпорту, і дозволяє уникнути непотрібного повторення розташування Ваших даних.
поле підкласів
Вам пропонується створити свої власні поля, що робити те, що ви хочете. Польові підкласи мають функцію гачок pre_validate які беруть вхідне значення і може перетворити його, однак вони хочуть. Зверніть увагу, що це буде працювати тільки якщо поля, насправді присутній; тому, щоб отримати щось на зразок auto_now_add на DateTimeField, ви хочете, щоб він вимагав і мати свій pre_validate повернути None в datetime.datetime.now ()
Вимоги :.
- Python
Коментар не знайдено