Информация: | MongoEngine — это ORM-подобный слой поверх PyMongo. |
---|---|
Репозиторий: | https://github.com/MongoEngine/mongoengine |
Автор: | Гарри Марр (http://github.com/hmarr) |
Сопровождающий: | Бастьен Жерар (http://github.com/bagerard) |
MongoEngine — это средство сопоставления объектов и документов Python для работы с MongoDB. Документация доступна по адресу https://mongoengine-odm.readthedocs.io — в настоящее время там есть учебное пособие, руководство пользователя и справочник по API.
MongoEngine в настоящее время тестируется на MongoDB v3.6, v4.0, v4.4, v5.0, v6.0 и v7.0. Будущие версии также должны поддерживаться, но в настоящее время они активно не тестируются. Обязательно откройте проблему или отправьте запрос на включение, если у вас возникнут какие-либо проблемы с более поздними версиями MongoDB.
Мы рекомендуем использовать virtualenv и pip. Затем вы можете использовать python -m pip install -U mongoengine
. У вас также могут быть инструменты настройки, поэтому вы можете использовать easy_install -U mongoengine
. Другой вариант — Pipenv. Затем вы можете использовать pipenv install mongoengine
как для создания виртуальной среды, так и для установки пакета. В противном случае вы можете скачать исходный код с GitHub и запустить python setup.py install
.
Поддержка Python2 была прекращена в MongoEngine 0.20.0.
Все зависимости можно легко установить с помощью python -m pip. По крайней мере, вам понадобятся эти два пакета для использования MongoEngine:
Если вы используете DateTimeField
, вы также можете использовать более гибкий парсер даты:
Если вам нужно использовать ImageField
или ImageGridFsProxy
:
Если вам нужно использовать сигналы:
Несколько простых примеров того, как выглядит код MongoEngine:
from mongoengine import *
connect ( 'mydb' )
class BlogPost ( Document ):
title = StringField ( required = True , max_length = 200 )
posted = DateTimeField ( default = datetime . datetime . utcnow )
tags = ListField ( StringField ( max_length = 50 ))
meta = { 'allow_inheritance' : True }
class TextPost ( BlogPost ):
content = StringField ( required = True )
class LinkPost ( BlogPost ):
url = StringField ( required = True )
# Create a text-based post
> >> post1 = TextPost ( title = 'Using MongoEngine' , content = 'See the tutorial' )
> >> post1 . tags = [ 'mongodb' , 'mongoengine' ]
> >> post1 . save ()
# Create a link-based post
> >> post2 = LinkPost ( title = 'MongoEngine Docs' , url = 'hmarr.com/mongoengine' )
> >> post2 . tags = [ 'mongoengine' , 'documentation' ]
> >> post2 . save ()
# Iterate over all posts using the BlogPost superclass
> >> for post in BlogPost . objects :
... print ( '===' , post . title , '===' )
... if isinstance ( post , TextPost ):
... print ( post . content )
... elif isinstance ( post , LinkPost ):
... print ( 'Link:' , post . url )
...
# Count all blog posts and its subtypes
>> > BlogPost . objects . count ()
2
>> > TextPost . objects . count ()
1
>> > LinkPost . objects . count ()
1
# Count tagged posts
>> > BlogPost . objects ( tags = 'mongoengine' ). count ()
2
>> > BlogPost . objects ( tags = 'mongodb' ). count ()
1
Чтобы запустить набор тестов, убедитесь, что вы используете локальный экземпляр MongoDB на стандартном порту и у вас установлен pytest
. Затем запустите pytest tests/
.
Чтобы запустить набор тестов на каждой поддерживаемой версии Python и PyMongo, вы можете использовать tox
. Вам необходимо убедиться, что в вашей среде установлены все поддерживаемые версии Python, а затем:
# Install tox
$ python -m pip install tox
# Run the test suites
$ tox
Мы приветствуем вклады! См. правила внесения взносов.