Infos : | MongoEngine est une couche de type ORM au-dessus de PyMongo. |
---|---|
Dépôt: | https://github.com/MongoEngine/mongoengine |
Auteur: | Harry Marr (http://github.com/hmarr) |
Responsable : | Bastien Gérard (http://github.com/bagerard) |
MongoEngine est un mappeur objet-document Python permettant de travailler avec MongoDB. La documentation est disponible sur https://mongoengine-odm.readthedocs.io - il existe actuellement un didacticiel, un guide de l'utilisateur et une référence API.
MongoEngine est actuellement testé sur MongoDB v3.6, v4.0, v4.4, v5.0, v6.0 et v7.0. Les versions futures devraient également être prises en charge, mais ne sont pas activement testées pour le moment. Assurez-vous d'ouvrir un problème ou de soumettre une pull request si vous rencontrez des problèmes avec une version plus récente de MongoDB.
Nous recommandons l'utilisation de virtualenv et de pip. Vous pouvez ensuite utiliser python -m pip install -U mongoengine
. Vous pouvez également disposer d'outils de configuration et ainsi utiliser easy_install -U mongoengine
. Une autre option est pipenv. Vous pouvez ensuite utiliser pipenv install mongoengine
pour créer l'environnement virtuel et installer le package. Sinon, vous pouvez télécharger la source depuis GitHub et exécuter python setup.py install
.
Le support de Python2 a été abandonné avec MongoEngine 0.20.0
Toutes les dépendances peuvent facilement être installées via python -m pip. Au minimum, vous aurez besoin de ces deux packages pour utiliser MongoEngine :
Si vous utilisez un DateTimeField
, vous pouvez également utiliser un analyseur de date plus flexible :
Si vous devez utiliser un ImageField
ou ImageGridFsProxy
:
Si vous devez utiliser des signaux :
Quelques exemples simples de ce à quoi ressemble le code 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
Pour exécuter la suite de tests, assurez-vous que vous exécutez une instance locale de MongoDB sur le port standard et que pytest
est installé. Ensuite, exécutez pytest tests/
.
Pour exécuter la suite de tests sur toutes les versions de Python et PyMongo prises en charge, vous pouvez utiliser tox
. Vous devrez vous assurer que chaque version de Python prise en charge est installée dans votre environnement, puis :
# Install tox
$ python -m pip install tox
# Run the test suites
$ tox
Nous apprécions les contributions ! Voir les directives de contribution