Skip to main content

Async Peewee

Project description

Build Status

AioPeewee

Asyncio interface for peewee modeled after torpeewee

Limitations (hopefully resolved in a couple of weeks):

  • currently just aiomysql supported

  • untested transactions

More thorough testing is on the way.

Any feedback would be greatly appreciated!

Install

pip install aiopeewee

Usage

from aiopeewee import AioModel, AioMySQLDatabase
from peewee import CharField, TextField, DateTimeField
from peewee import ForeignKeyField, PrimaryKeyField


db = AioMySQLDatabase('test', host='127.0.0.1', port=3306,
                     user='root', password='')


class User(AioModel):
    username = CharField()

    class Meta:
        database = db


class Blog(AioModel):
    user = ForeignKeyField(User)
    title = CharField(max_length=25)
    content = TextField(default='')
    pub_date = DateTimeField(null=True)
    pk = PrimaryKeyField()

    class Meta:
        database = db


# create connection pool
await db.connect(loop)

# count
await User.select().count()

# async iteration on select query
async for user in User.select():
    print(user)

# fetch all records as a list from a query in one pass
users = await User.select()

# insert
user = await User.create(username='kszucs')

# modify
user.username = 'krisztian'
await user.save()

# async iteration on blog set
[b.title async for b in user.blog_set.order_by(Blog.title)]

# close connection pool
await db.close()

# see more in the tests

ManyToMany

Note that AioManyToManyField must be used instead of ManyToMany.

from aiopeewee import AioManyToManyField


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

    class Meta:
        database = db


class Note(AioModel):
    text = TextField()
    users = AioManyToManyField(User)

    class Meta:
        database = db


NoteUserThrough = Note.users.get_through_model()


async for user in note.users:
    # do something with the users

Currently the only limitation I’m aware of immidiate setting of instance relation must be replaced with a method call:

# original, which is not supported
charlie.notes = [n2, n3]

# use instead
await charlie.notes.set([n2, n3])

Serializing

Converting to dict requires the asyncified version of model_to_dict

from aiopeewee import model_to_dict

serialized = await model_to_dict(user)

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

aiopeewee-0.3.3.tar.gz (12.6 kB view details)

Uploaded Source

File details

Details for the file aiopeewee-0.3.3.tar.gz.

File metadata

  • Download URL: aiopeewee-0.3.3.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiopeewee-0.3.3.tar.gz
Algorithm Hash digest
SHA256 99aa49b67feb31a87ad867cb55b9e9427e992d38378a5746fd5b6ec7e9fa2801
MD5 5d8c700c02fca2f17ab016eb7f8e8676
BLAKE2b-256 3fba098d445f660523d75282585ae400dca1c3d32e7383b8bc5298d3ccb93f23

See more details on using hashes here.

Supported by

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