Peewee ORM

4.0.3 · active · verified Sun Mar 29

Peewee is a simple and small Python ORM (Object-Relational Mapper) that provides an expressive interface for database operations. It supports SQLite, MySQL/MariaDB, and PostgreSQL, and offers flexible query-building, asyncio support, and numerous extensions. The library is actively maintained with frequent releases, currently at version 4.0.3.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to define Peewee models, connect to an in-memory SQLite database, create tables, insert records, and query data with relationships. It showcases basic CRUD operations and how to iterate over query results.

import datetime
from peewee import *

db = SqliteDatabase(':memory:') # Use an in-memory SQLite database

class BaseModel(Model):
    class Meta:
        database = db

class User(BaseModel):
    username = CharField(unique=True)

class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')
    content = TextField()
    timestamp = DateTimeField(default=datetime.datetime.now)

def run_quickstart():
    db.connect()
    db.create_tables([User, Tweet])

    # Create users
    charlie = User.create(username='charlie')
    huey = User.create(username='huey')

    # Create tweets
    Tweet.create(user=charlie, content='Hello from Charlie!')
    Tweet.create(user=huey, content='Meow!')
    Tweet.create(user=charlie, content='Another tweet.')

    # Query data
    print("\n--- All Tweets ---")
    for tweet in Tweet.select().order_by(Tweet.timestamp.desc()):
        print(f"{tweet.user.username} -> {tweet.content}")

    # Get a single user's tweets
    print("\n--- Charlie's Tweets ---")
    for tweet in charlie.tweets:
        print(f"{tweet.user.username} -> {tweet.content}")

    db.close()

if __name__ == '__main__':
    run_quickstart()

view raw JSON →