Peewee is a simple and small ORM. It has few (but expressive) concepts, making it easy to learn and intuitive to use.
- a small, expressive ORM
- python 2.7+ and 3.4+
- supports sqlite, mysql, mariadb, postgresql and cockroachdb
- tons of extensions
New to peewee? These may help:
- Quickstart
- Example twitter app
- Using peewee interactively
- Models and fields
- Querying
- Relationships and joins
Defining models is similar to Django or SQLAlchemy:
from peewee import *
import datetime
db = SqliteDatabase('my_database.db')
class BaseModel(Model):
class Meta:
database = db
class User(BaseModel):
username = CharField(unique=True)
class Tweet(BaseModel):
user = ForeignKeyField(User, backref='tweets')
message = TextField()
created_date = DateTimeField(default=datetime.datetime.now)
is_published = BooleanField(default=True)
Connect to the database and create tables:
db.connect()
db.create_tables([User, Tweet])
Create a few rows:
charlie = User.create(username='charlie')
huey = User(username='huey')
huey.save()
# No need to set `is_published` or `created_date` since they
# will just use the default values we specified.
Tweet.create(user=charlie, message='My first tweet')
Queries are expressive and composable:
# A simple query selecting a user.
User.get(User.username == 'charlie')
# Get tweets created by one of several users.
usernames = ['charlie', 'huey', 'mickey']
users = User.select().where(User.username.in_(usernames))
tweets = Tweet.select().where(Tweet.user.in_(users))
# We could accomplish the same using a JOIN: