Skip to main content

Faster than minimongo, lighter than micromongo, please welcome picomongo, the ultimate Mongo ODM made by Dailymotion.

Getting started

To start off with picomongo, just import it:

>>> from picomongo import Document, ConnectionManager
>>> ConnectionManager.configure()

And you’re ready, let’s define a document:

>>> class UserDocument(Document):
...     pass
>>> user = UserDocument({'name': 'Mike'})
>>> user
UserDocument({'name': 'Mike'})
>>> user.name
'Mike'
>>> user.save()

YOU: Wait, wait where is my document ?

Don’t worry, in order to facilitate your work, picomongo use these default values:

  • Mongo uri: ‘mongodb://localhost’

  • Database: ‘test’

  • Collection: Your document class name in lowercase

You have access to these values, which are traditionnal pymongo objects:

>>> UserDocument.con
Connection('localhost', 27017)
>>> UserDocument.db
Database(Connection('localhost', 27017), u'test')
>>> UserDocument.col
Collection(Database(Connection('localhost', 27017), u'test'), u'userdocument')

One thing you should always keep in mind, you always need to call configure before be able to save/retrieve your documents. If you want to use the default configuration, just call configure without arguments otherwise see below (part Configuration time).

TIP: You can call configure after the declaration of your documents BUT before document saving/retrieving.

You can use them as you will do with traditionnal pymongo objects, for example you can retrieve your user using traditionnal collection:

>>> UserDocument.col.find_one()
{u'_id': ObjectId('4eb2cae58250f05eb4000000'), u'name': u'Mike'}

YOU: But wait, why I get a dict, I want an object instead.

Don’t worry, it’s even more simpler:

>>> user2 = UserDocument.find_one()
UserDocument({u'_id': ObjectId('4eb2cae58250f05eb4000000'), u'name': u'Mike'})
>>> user2.name
u'Mike'

But when this auto-configuration was done? As soon as you try to access them.

Configure the collection

You can configure on which collection your documents will be saved. You can override the collection_name in your custom Document classes if you want to configure it. Example:

>>> class CustomDocument(Document):
...     collection_name = 'my_custom_collection'
>>> custom = CustomDocument()
>>> custom.col
Collection(Database(Connection('localhost', 27017), u'test'), u'my_custom_collection')

Configuration time

Once you use it a bit, let’s see the most powerful part of picomongo, configuration.

All configurations are stored in ConnectionManager:

>>> from picomongo import Document, ConnectionManager

You can add your own configuration by calling the configure method with your configuration. The configuration format is:

{'_default_': {'uri': 'default_uri', 'db': 'default_db'},
 'document_name': {'uri': 'specific_uri', 'db': 'specific_db', 'col': 'default_col'},
 'document_name2': ...,}

Uri must be a valid mongodb connection uri as described in this doc page: http://www.mongodb.org/display/DOCS/Connections

Nothing is required in the configuration, and picomongo will use some rules to compute the final configuration:

  • In default configuration:
    • If uri is not present, use ‘mongodb://localhost’

    • If db is not present, use ‘test’

  • In document configuration:
    • If uri is not present, use default uri

    • If db is not present, use default db

    • If col is not preset, use document class name

You can access configuration using this syntax:

>>> ConnectionManager.get_config('_default_')   # Access default configuration
>>> ConnectionManager.get_config('document')    # Access configuration for document named 'document'

Here is some examples of configurations:

  • Change default db:

    >>> ConnectionManager.configure({'\_default\_': {'db': 'other_db'}})
    >>> ConnectionManager.get_config('\_default\_').db
    Database(Connection('localhost', 27017), u'other_db')
  • Store some documents in another mongodb instance:

    >>> ConnectionManager.configure({'document1': {'uri': 'mongodb://127.0.0.1:8000'}})
    >>> ConnectionManager.get_config('_default_').con
    Connection('localhost', 27017)
    >>> ConnectionManager.get_config('document1').con
    Connection('localhost', 8000)

TIP: This last example will surely fail as picomongo try to connect to this uri during configuration (and you probably do not have a mongodb instance running at this uri).

Metadata

Release files for picomongo 0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for picomongo 0.6
File Size Uploaded
picomongo-0.6.tar.gz 4.2 kB Details

Release files / picomongo-0.6.tar.gz

Download URL picomongo-0.6.tar.gz
Size 4.2 kB
Tags Source
SHA-256 checksum
How to use checksums
39c039698a6b95cb7e27e4af506b413f64f546a1cb2945021d1dd5d81635a2c6
BLAKE2b-256 checksum
How to use checksums
1268d9b3c47c6217c710b5b4f1c1a0f744e06fb85bb4b2feb26ac888fd030dcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.6 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page