异步PeeWee
aiopeewee的Python项目详细描述
空气压缩机
实现的数据库适配器:
- [X]aiomysql
- []AIOPG
- []sqlite
目前,peewee已经移植了125个测试用例,并不是全部,而是不断增加。
也支持简单的原子操作(事务),但现在已经过了很好的测试。
安装
pip install aiopeewee
使用量
fromaiopeeweeimportAioModel,AioMySQLDatabasefrompeeweeimportCharField,TextField,DateTimeFieldfrompeeweeimportForeignKeyField,PrimaryKeyFielddb=AioMySQLDatabase('test',host='127.0.0.1',port=3306,user='root',password='')classUser(AioModel):username=CharField()classMeta:database=dbclassBlog(AioModel):user=ForeignKeyField(User)title=CharField(max_length=25)content=TextField(default='')pub_date=DateTimeField(null=True)pk=PrimaryKeyField()classMeta:database=db# create connection poolawaitdb.connect(loop)# countawaitUser.select().count()# async iteration on select queryasyncforuserinUser.select():print(user)# fetch all records as a list from a query in one passusers=awaitUser.select()# insertuser=awaitUser.create(username='kszucs')# modifyuser.username='krisztian'awaituser.save()# async iteration on blog set[b.titleasyncforbinuser.blog_set.order_by(Blog.title)]# close connection poolawaitdb.close()# see more in the tests
许多
注意,必须使用aiomanytomanyfield而不是manytomy。
fromaiopeeweeimportAioManyToManyFieldclassUser(AioModel):username=CharField(unique=True)classMeta:database=dbclassNote(AioModel):text=TextField()users=AioManyToManyField(User)classMeta:database=dbNoteUserThrough=Note.users.get_through_model()asyncforuserinnote.users:# do something with the users
目前,我所知道的实例关系的immidiate设置的唯一限制必须替换为方法调用:
# original, which is not supportedcharlie.notes=[n2,n3]# use insteadawaitcharlie.notes.set([n2,n3])
序列化
转换为dict需要异步版本的model-to-dict
fromaiopeeweeimportmodel_to_dictserialized=awaitmodel_to_dict(user)