一个简单的orm支持异步,aiopeewee的fork
aioorm的Python项目详细描述
- 版本:0.1.6
- 状态:生产
- 作者:hsz
- 电子邮件:hsz1273327@gmail.com
功能
- 支持mysql和postgresql
- 使用数据库URL的数据库工厂
- 使用peewee的字段
- manytomanyfield支持
- 快捷方式支持
- CSV转储/加载支持
- 可以使用playhose.postgres_ext.jsonfield
安装
- python -m pip install aioorm
示例:grud
fromaioormimportAioModel,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。
fromaioormimportAioManyToManyFieldclassUser(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
fromaioormimportmodel_to_dictserialized=awaitmodel_to_dict(user)
转储到csv
表可以转储到csv文件。
fromaioorm.utilsimportaiodump_csvquery=User.select().order_by(User_csv.id)awaitaiodump_csv(query,str(filepath))
待办事项
- 异步数据集支持
- 更多测试
限制
- 未经测试的交易
- 仅支持MySQL和PostgreSQL
错误修复
- 修正了get和get或create的错误