Skip to main content

Peewee support for async frameworks (Asyncio, Trio)

Project description

DeprecationWarning

The package is deprecated. Please use peewee-aio instead.

aio-peewee – Peewee support for async frameworks (Asyncio, Trio, Curio)

Tests Status PYPI Version Python Versions

The library doesn’t make peewee work async, but allows you to use Peewee with your asyncio based libraries correctly.

Features

  • Tasks Safety. The library tracks of the connection state using Task-local storage, making the Peewee Database object safe to use with multiple tasks inside a loop.

  • Async management of connections for Peewee Connections Pool

Requirements

  • python >= 3.8

Installation

aio-peewee should be installed using pip:

pip install aio-peewee

QuickStart

from aiopeewee import db_url

db = db_url.connect('postgres+async://locahost:5432/database')

async def main(id=1):
    async with db:
        item = Model.get(Model.id == 1)

    return item.name

Usage

Initialization

from aiopeewee import PostgresqlDatabaseAsync, SqliteDatabaseAsync, MySQLDatabaseAsync, CockroachDatabaseAsync

 db = PostgresqlDatabaseAsync('my_app', user='app', password='db_password', host='10.1.0.8', port=3306)

Async Connect

# Manual
async def main():
     await db.connect_async()
     # ...
     await db.close_async()

 # Context manager
async def main():
     async with db:
         # ...

Connection Pooling

from aiopeewee import PooledPostgresqlDatabaseAsync, PooledSqliteDatabaseAsync, PooledMySQLDatabaseAsync, PooledCockroachDatabaseAsync

db = PooledPostgresqlDatabaseAsync('my_database', max_connections=8, stale_timeout=300, user='postgres')

Database URL

from aiopeewee import db_url

 db0 = db_url.connect('cockroachdb+async://localhost/db', **db_params)
 db1 = db_url.connect('cockroachdb+pool+async://localhost/db', **db_params)
 db2 = db_url.connect('mysql+async://localhost/db', **db_params)
 db3 = db_url.connect('mysql+pool+async://localhost/db', **db_params)
 db4 = db_url.connect('postgres+async://localhost/db', **db_params)
 db5 = db_url.connect('postgres+pool+async://localhost/db', **db_params)
 db6 = db_url.connect('sqlite+async://localhost/db', **db_params)
 db7 = db_url.connect('sqlite+pool+async://localhost/db', **db_params)
 db8 = db_url.connect('sqliteexc+async://localhost/db', **db_params)
 db9 = db_url.connect('sqliteexc+pool+async://localhost/db', **db_params)

ASGI Middleware

import datetime as dt

from asgi_tools import App
from aiopeewee import PeeweeASGIPlugin
import peewee as pw


db = PeeweeASGIPlugin(url='sqlite+async:///db.sqlite')


@db.register
class Visit(pw.Model):
    created = pw.DateTimeField(default=dt.datetime.utcnow())
    address = pw.CharField()


db.create_tables()


app = App()


@app.route('/')
async def visits_json(request):
    """Store the visit and load latest 10 visits."""
    Visit.create(address=request.client[0])
    return [{
        'id': v.id, 'address': v.address, 'timestamp': round(v.created.timestamp()),
    } for v in Visit.select().order_by(Visit.id.desc()).limit(10)]


app = db.middleware(app)

Curio

aio-peewee uses contextvars to store db connections. So you have to enable contextvars for Curio: https://curio.readthedocs.io/en/latest/howto.html#how-do-you-use-contextvars

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/aio-peewee/issues

Contributing

Development of the project happens at: https://github.com/klen/aio-peewee

License

Licensed under a MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio-peewee-0.4.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

aio_peewee-0.4.1-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file aio-peewee-0.4.1.tar.gz.

File metadata

  • Download URL: aio-peewee-0.4.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for aio-peewee-0.4.1.tar.gz
Algorithm Hash digest
SHA256 8f043d8475da0e26090ee65f051e5a2d81f107d8695275905afe6d4d391dff8e
MD5 1a4496023b3a2cf881e1dec9063720af
BLAKE2b-256 3bfb44331a60813a1a4934d845fea327b89115c7632749d2d597ba9a52d84e4e

See more details on using hashes here.

File details

Details for the file aio_peewee-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: aio_peewee-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for aio_peewee-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 843141c40d0d440efef9c2eb12f956c6f8beead8cc6e8b454bf8be438d7d1ff3
MD5 83f508a2fed5648a9058790a1dab2f21
BLAKE2b-256 e5a5da2b48bff9d873cf3e62ee94434efb88b5554b566f9fe907eead3670ce6c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page