Notes on Peewee and MongoEngine

Peewee

Peewee is a lightweight ORM similar to SQLAlchemy, supporting MySQL, SQLite, PostgreSQL, and more.

Connect

1
2
3
from peewee import *
mysql_db = MySQLDatabase('database', host='', user='', passwd='')
mysql_db.connect()

Define models

1
2
3
4
5
6
7
class Person(Model):
name = CharField()
birthday = DateField()
is_relative = BooleanField()

class Meta:
database = mysql_db

Use a base class when declaring multiple models:

1
2
3
4
5
6
7
8
9
10
class BaseModel(Model):
class Meta:
database = mysql_db

class User(BaseModel):
username = CharField()

class Tweet(BaseModel):
user = ForeignKeyField(User, related_name='tweets')
message = TextField()

Create tables

mysql_db.create_tables([User, Tweet])

Insert and update

1
2
3
4
5
6
7
uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15), is_relative=True)
uncle_bob.save()

grandma = Person.create(name='Grandma', birthday=date(1935, 3, 1), is_relative=True)

grandma.name = 'Grandma L.'
grandma.save()

Queries

1
2
3
4
5
6
grandma = Person.select().where(Person.name == 'Grandma L.').get()
# or
grandma = Person.get(Person.name == 'Grandma L.')

for pet in Pet.select().where(Pet.animal_type == 'cat'):
print pet.name, pet.owner.name

MongoEngine

MongoEngine is an ODM for MongoDB.

Connect

1
2
from mongoengine import *
connect('tumblelog')

Models

1
2
3
4
class User(Document):
email = StringField(required=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)

Insert and update

1
2
3
ross = User(email='[email protected]', first_name='Ross', last_name='Lawley').save()
ross.first_name = 'Ross'
ross.save()

Queries

1
2
for post in Post.objects(tags='mongodb'):
print(post.title)

References:

peewee documentation

MongoEngine documentation