a fork of aiopeewee-0.3.5,support postgresql
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
aioorm
docs
document
requirements
test
.DS_Store
.gitignore
.pmfprc.json
0_user_out.csv
LICENSE
MANIFEST.in
README.md
README.rst
peewee.db
setup.py
test_feature.ipynb

README.md

aioorm

Description

Asyncio interface for peewee modeled after torpeewee

keywords:python3.5+,asyncio,orm,mysql,postgresql

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

Examples

There are some Examples to show the use case

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 <https://github.com/Python-Tools/aioorm>_.

TODO

  • async dataset support
  • more test

Limitations

  • untested transactions
  • only support mysql and postgresql

Bug fix

  • fixed get and get_or_create 's bug