peewee-async集成到tornado
作者:互联网
上面学习的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