zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    读书笔记
    STL 笔记
    Centos8如何配置网桥
    命令集合
    shared_ptr给管理的对象定制析沟函数
    share_ptr指向的对象的析构动作在创建的时候被捕获
    优秀博客
    字符串单词翻转
    带权图的最短路径算法(Dijkstra,Floyd,Bellman_ford)
    生产者与消费者 c++实现
  • 原文地址:https://www.cnblogs.com/topass123/p/13406668.html
Copyright © 2011-2022 走看看