Started work on user guide

This commit is contained in:
Harry Marr 2009-12-21 04:33:36 +00:00
parent e204b84183
commit 78d8cc7df8
4 changed files with 89 additions and 13 deletions

View File

@ -6,18 +6,20 @@
MongoEngine User Documentation MongoEngine User Documentation
======================================= =======================================
Contents: MongoEngine is an Object-Document Mapper, written in Python for working with
MongoDB. The source is available on
`GitHub <http://github.com/hmarr/mongoengine>`_.
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
tutorial.rst tutorial.rst
userguide.rst
apireference.rst apireference.rst
Indices and tables Indices and tables
================== ==================
* :ref:`genindex` * :ref:`genindex`
* :ref:`modindex`
* :ref:`search` * :ref:`search`

View File

@ -9,14 +9,14 @@ application. As the purpose of this tutorial is to introduce MongoEngine, we'll
focus on the data-modelling side of the application, leaving out a user focus on the data-modelling side of the application, leaving out a user
interface. interface.
Connecting to MongoDB Getting started
--------------------- ---------------
Before we start, make sure that a copy of MongoDB is running in an accessible Before we start, make sure that a copy of MongoDB is running in an accessible
location --- running it locally will be easier, but if that is not an option location --- running it locally will be easier, but if that is not an option
then it may be run on a remote server. then it may be run on a remote server.
Before we can start using MongoEngine, we need to tell it how to connect to our Before we can start using MongoEngine, we need to tell it how to connect to our
instance of **mongod**. For this we use the :func:`mongoengine.connect` instance of :program:`mongod`. For this we use the :func:`~mongoengine.connect`
function. The only argument we need to provide is the name of the MongoDB function. The only argument we need to provide is the name of the MongoDB
database to use:: database to use::
@ -24,11 +24,7 @@ database to use::
connect('tumblelog') connect('tumblelog')
This will connect to a mongod instance running locally on the default port. To For more information about connecting to MongoDB see :ref:`guide-connecting`.
connect to a mongod instance running elsewhere, specify the host and port
explicitly::
connect('tumblelog', host='192.168.1.35', port=12345)
Defining our documents Defining our documents
---------------------- ----------------------

80
docs/userguide.rst Normal file
View File

@ -0,0 +1,80 @@
User Guide
==========
.. _guide-connecting:
Connecting to MongoDB
---------------------
To connect to a running instance of :program:`mongod`, use the
:func:`~mongoengine.connect` function. The first argument is the name of the
database to connect to. If the database does not exist, it will be created. If
the database requires authentication, :attr:`username` and :attr:`password`
arguments may be provided::
from mongoengine import connect
connect('project1', username='webapp', password='pwd123')
By default, MongoEngine assumes that the :program:`mongod` instance is running
on **localhost** on port **27017**. If MongoDB is running elsewhere, you may
provide :attr:`host` and :attr:`port` arguments to
:func:`~mongoengine.connect`::
connect('project1', host='192.168.1.35', port=12345)
Defining documents
------------------
In MongoDB, a **document** is roughly equivalent to a **row** in an RDBMS. When
working with relational databases, rows are stored in **tables**, which have a
strict **schema** that the rows follow. MongoDB stores documents in
**collections** rather than tables - the principle difference is that no schema
is enforced at a database level.
Defining a document's schema
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MongoEngine allows you to define schemata for documents as this helps to reduce
coding errors, and allows for utility methods to be defined on fields which may
be present.
To define a schema for a document, create a class that inherits from
:class:`~mongoengine.Document`. Fields are specified by adding **field
objects** as class attributes to the document class::
from mongoengine import *
import datetime
class Page(Document):
title = StringField(max_length=200, required=True)
date_modified = DateTimeField(default=datetime.now)
Fields
^^^^^^
By default, fields are not required. To make a field mandatory, set the
:attr:`required` keyword argument of a field to ``True``. Fields also may have
validation constraints available (such as :attr:`max_length` in the example
above). Fields may also take default values, which will be used if a value is
not provided. Default values may optionally be a callable, which will be called
to retrieve the value (such as in the above example). The field types available
are as follows:
* :class:`~mongoengine.StringField`
* :class:`~mongoengine.IntField`
* :class:`~mongoengine.FloatField`
* :class:`~mongoengine.DateTimeField`
* :class:`~mongoengine.ObjectIdField`
* :class:`~mongoengine.EmbeddedDocumentField`
* :class:`~mongoengine.ReferenceField`
Document collections
^^^^^^^^^^^^^^^^^^^^
Document classes that inherit **directly** from :class:`~mongoengine.Document`
will have their own **collection** in the database. The name of the collection
is by default the name of the class, coverted to lowercase (so in the example
above, the collection would be called `page`). If you need to change the name
of the collection (e.g. to use MongoEngine with an existing database), then
create a class dictionary attribute called :attr:`meta` on your document, and
set :attr:`collection` to the name of the collection that you want your
document class to use::
class Page(Document):
title = StringField(max_length=200, required=True)
meta = {'collection': 'cmsPage'}

View File

@ -29,15 +29,13 @@ def _get_db():
raise ConnectionError('Not connected to database') raise ConnectionError('Not connected to database')
return _db return _db
def connect(db=None, username=None, password=None, **kwargs): def connect(db, username=None, password=None, **kwargs):
"""Connect to the database specified by the 'db' argument. Connection """Connect to the database specified by the 'db' argument. Connection
settings may be provided here as well if the database is not running on settings may be provided here as well if the database is not running on
the default port on localhost. If authentication is needed, provide the default port on localhost. If authentication is needed, provide
username and password arguments as well. username and password arguments as well.
""" """
global _db global _db
if db is None:
raise TypeError('"db" argument must be provided to connect()')
_connection_settings.update(kwargs) _connection_settings.update(kwargs)
connection = _get_connection() connection = _get_connection()