Skip to content

piccolo-orm/piccolo

Repository files navigation

Logo

Tests Release Documentation Status PyPI codecov

Piccolo is a fast, user friendly ORM and query builder which supports asyncio.Read the docs.

Features

Some of it’s stand out features are:

  • Support for sync and async.
  • A builtin playground, which makes learning a breeze.
  • Tab completion support - works great with iPython and VSCode.
  • Batteries included - a User model, authentication, migrations, anadmin GUI,and more.
  • Modern Python - fully type annotated.
  • Make your codebase modular and scalable with Piccolo apps (similar to Django apps).

Syntax

The syntax is clean and expressive.

You can use it as a query builder:

# Select:
awaitBand.select(
Band.name
).where(
Band.popularity>100
)

# Join:
awaitBand.select(
Band.name,
Band.manager.name
)

# Delete:
awaitBand.delete().where(
Band.popularity<1000
)

# Update:
awaitBand.update({Band.popularity:10000}).where(
Band.name=='Pythonistas'
)

Or like a typical ORM:

# To create a new object:
b=Band(name='C-Sharps',popularity=100)
awaitb.save()

# To fetch an object from the database, and update it:
b=awaitBand.objects().get(Band.name=='Pythonistas')
b.popularity=10000
awaitb.save()

# To delete:
awaitb.remove()

Installation

Installing with PostgreSQL driver:

pip install'piccolo[postgres]'

Installing with SQLite driver:

pip install'piccolo[sqlite]'

Installing with all optional dependencies (easiest):

pip install'piccolo[all]'

Building a web app?

Let Piccolo scaffold you an ASGI web app, using Piccolo as the ORM:

piccolo asgi new

Starlette,FastAPI,BlackSheep,Litestar,EsmeraldandLilyaare currently supported.

Are you a Django user?

We have a handy page which shows the equivalent ofcommon Django queries in Piccolo.

Documentation

Our documentation is onRead the docs.

We also have some greattutorial videos on YouTube.