Skip to main content

a simple orm suport asyncio,fork of aiopeewee

Project description


Asyncio interface for peewee modeled after torpeewee

Feature

  • support mysql and postgresql

  • database factory using database URL

  • use peewee’s fields

  • ManyToManyField support

  • Shortcuts support

  • csv dump /load support

  • can use playhose.postgres_ext.JSONField

Install

  • python -m pip install aioorm

Example: GRUD

from aioorm 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

Example: Many to many

Note that AioManyToManyField must be used instead of ManyToMany.

from aioorm 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 aioorm import model_to_dict

serialized = await model_to_dict(user)

Dump to csv

tables can be dump to a csv file.

from aioorm.utils import aiodump_csv
query = User.select().order_by(User_csv.id)
await aiodump_csv(query,str(filepath))

Documentation

Documentation on Readthedocs.

TODO

  • async dataset support

  • more test

Limitations

  • untested transactions

  • only support mysql and postgresql

Bug fix

  • fixed get and get_or_create ‘s bug

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

aioorm-0.1.6.tar.gz (31.9 kB view details)

Uploaded Source

Built Distribution

aioorm-0.1.6-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file aioorm-0.1.6.tar.gz.

File metadata

  • Download URL: aioorm-0.1.6.tar.gz
  • Upload date:
  • Size: 31.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.6

File hashes

Hashes for aioorm-0.1.6.tar.gz
Algorithm Hash digest
SHA256 fc6b105e422e5549b7591d78cd883baaeeb0532a0844433b73bce22511a76bf1
MD5 318fc59c38989ce4486a1bc5a4f02663
BLAKE2b-256 9f17ddfdc49f637bf79b76e4691109fc3443ebf5f7521892059ac0ac8de84f1b

See more details on using hashes here.

File details

Details for the file aioorm-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: aioorm-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 27.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.6

File hashes

Hashes for aioorm-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ce93894caf6f63913f868a5b5a4b5f47c9ce5efc2c12d713851b2572da634522
MD5 223a14d47e50cce29940c63b0de15c30
BLAKE2b-256 1727cca3916a9af9c00fb37d03953368bd84dfa3bf3c7e02b8b4597c91479588

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