More Related Content Similar to Inside PyMongo - MongoNYC (20) More from Mike Dirolf (14) Inside PyMongo - MongoNYC3. API Basics
>>> from pymongo import Connection
>>> db = Connection().test_db
>>> db.test.insert({"x": 1})
ObjectId('4bdafd07e6fb1b351e000000')
>>> db.test.find_one()
{u'x': 1, u'_id':
ObjectId('4bdafd07e6fb1b351e000000')
}
5. GridFS (setup)
>>> from pymongo import Connection
>>> import gridfs
>>>
>>> db = Connection().gridfs_example
>>> fs = gridfs.GridFS(db)
6. GridFS (before)
>>> f = fs.open("hello.txt", "w")
>>> f.write("hello ")
>>> f.write("world")
>>> f.close()
>>> g = fs.open("hello.txt")
>>> g.read()
'hello world'
>>> g.close()
8. GridFS (after)
>>> myfile = fs.new_file(location=[-74, 40.74])
>>> myfile.write("hello ")
>>> myfile.write("world,")
>>> myfile.writelines([" and have a ", "good day!"])
>>> myfile.close()
>>> out = fs.get(myfile._id)
>>> out.read()
'hello world, and have a good day!'
>>> out.location
[-74, 40.740000000000002]
12. Stored JS (1.5)
>>> db.system_js.add1 = "function (x) { return x + 1; }"
>>> db.system_js.add1(5)
6.0
>>> del db.system_js.add1
http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html
14. $slice and
Field Negation
>>> db.test.find(fields=[“foo”])
>>> db.test.find(fields={“foo”: 0})
>>> db.test.find(fields={“foo”: {“$slice”: -2}})
18. as_class
>>> c = Connection()
>>> c.db.test.save({"x": 1})
ObjectId('4bf6a71be6fb1b4bce000000')
>>> c.db.test.find_one()
{u'x': 1, u'_id': ObjectId('4bf6a71be6fb1b4bce000000')}
>>> c.db.test.find_one(as_class=SON)
SON([(u'_id', ObjectId('4bf6a71be6fb1b4bce000000')), (u'x', 1)])
>>> c.document_class=SON
>>> c.db.test.find_one()
SON([(u'_id', ObjectId('4bf6a71be6fb1b4bce000000')), (u'x', 1)])
22. Similar to +
• A lot of Django doesn’t depend on django.db:
• URL dispatch, templates, I18N, caching, etc.
• Some things do:
• Models
• Auth
• Sessions
• Admin
23. settings.py
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
)
INSTALLED_APPS = (
# 'django.contrib.auth',
'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.sites',
)
24. Representing a Poll
{'question': 'Do MongoDB + Django <3 each other?',
'pub_date': datetime.datetime(2010, 1, 21),
'choices': [{'votes': 35, 'choice': 'Yes!'},
{'votes': 2, 'choice': 'No...'}]}
25. models.py (PyMongo)
def save_poll(question):
return db.polls.insert({"question": question,
"pub_date": datetime.utcnow()})
def all_polls():
return db.polls.find()
def add_choice(poll_id, choice):
db.polls.update({"_id": poll_id},
{"$push": {"choices": {"choice": choice,
"votes": 0}}})
def add_vote(poll_id, choice):
db.polls.update({"_id": poll_id},
{"$inc": {"choices.%d.votes" % choice: 1}})
http://api.mongodb.org/python
26. models.py (MongoKit)
class Poll(mongokit.Document):
structure = {"question": str,
"pub_date": datetime,
"choices": [{"choice": str,
"votes": int}]}
required_fields = ["question"]
default_values = {"pub_date": datetime.utcnow}
http://bytebucket.org/namlook/mongokit
27. models.py (Ming)
class Poll(ming.Document):
class __mongometa__:
session = session
name = "polls"
_id = ming.Field(ming.schema.ObjectId)
question = ming.Field(str, required=True)
pub_date = ming.Field(datetime.datetime,
if_missing=datetime.datetime.utcnow)
choices = ming.Field([{"choice": str,
"votes": int}])
http://merciless.sourceforge.net/
28. mango - sessions and auth
• Full sessions support
• mango provided User class
• supports is_authenticated(), set_password(), etc.
http://github.com/vpulim/mango
29. mango - sessions and auth
SESSION_ENGINE = 'mango.session'
AUTHENTICATION_BACKENDS = ('mango.auth.Backend',)
MONGODB_HOST = 'localhost'
MONGODB_PORT = None
MONGODB_NAME = 'mydb'
http://github.com/vpulim/mango
30. What about admin?
• No great solution... yet.
• Could replace admin app like mango does
for sessions / auth
• Or...