ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

peewee-async集成到tornado

2020-07-30 22:00:41  阅读:23  来源: 互联网

标签:database tornado peewee sync TestModel objects async


上面学习的peewee是同步的ORM框架,如果我们想在tornado中使用,我们需要异步的ORM。

peewee-async是将peewee变成异步的一个库
import asyncio
import peewee
import peewee_async

# Nothing special, just define model and database:
# 定义数据库连接和 peewee 一样
database = peewee_async.MySQLDatabase(
    'message', 
    host="127.0.0.1", 
    port=3306, 
    user="root", 
    password="root"
)
# 创建模型和之前一样
class TestModel(peewee.Model):
    text = peewee.CharField()
    class Meta:
        database = database

# Look, sync code is working!
# 同步的方式创建数据库
TestModel.create_table(True)
TestModel.create(text="Yo, I can do it sync!")
database.close()

# 如果我们想异步使用 则是需要创建一个 Manager 以后执行 SQL 语句都是靠这个 Manager
objects = peewee_async.Manager(database)
# 将同步禁用
database.set_allow_sync(False)
async def handler():
    # 使用协程的方式来操作 进行数据库操作需要使用 我们创建的 Manager 实例
    await objects.create(TestModel, text="Not bad. Watch this, I'm async!")
    all_objects = await objects.execute(TestModel.select())
    # objects 负责真正的执行 SQL objects.execute() 返回的是一个协程对象 一定要使用 await
    for obj in all_objects:
        print(obj.text)
loop = asyncio.get_event_loop()
loop.run_until_complete(handler())
# loop.close() 
# run_until_complete 执行完之后自动调用 close

with objects.allow_sync():
    TestModel.drop_table(True)

# Expected output:
# Yo, I can do it sync!
# Not bad. Watch this, I'm async!

参考链接:https://www.jianshu.com/p/a2e0a3975cb5

       https://www.cnblogs.com/crazymagic/articles/10188327.html

 

标签:database,tornado,peewee,sync,TestModel,objects,async
来源: https://www.cnblogs.com/topass123/p/13406668.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有