zoukankan      html  css  js  c++  java
  • 16、【翻译】aiomysql-Pool

    本文翻译自:Pool-aiomysql 0.0.9 documentation

    Pool

    该库提供连接池以及普通连接对象。

    基本用法是:

    import asyncio
    import aiomysql
    
    loop = asyncio.get_event_loop()
    
    @asyncio.coroutine
    def go()
        pool = yield from aiomysql.create_pool(host='127.0.0.1', port=3306,
                                               user='root', password='',
                                               db='mysql', loop=loop)
    
        with (yield from pool) as conn:
            cur = yield from conn.cursor()
            yield from cur.execute("SELECT 10")
            # print(cur.description)
            (r,) = yield from cur.fetchone()
           assert r == 10
        pool.close()
        yield from pool.wait_closed()
    
    loop.run_until_complete(go())

    create_pool(minsize=1maxsize=10loop=None**kwargs)

    ——创建与MySQL数据库的连接池的协程。

    参数:

    • minsize (int) – 连接池的最少连接数目
    • maxsize (int) – 连接池的最大连接数据
    • loop – 是一个可选的事件循环实例,如果未指定loop,则使用asyncio.get_event_loop()
    • echo (bool) – – 执行日志SQL查询(默认为False)
    • kwargs – 该函数接受aiomysql.connect()所需的所有参数,以及可选的关键字参数loop,minsize,maxsize。

    返回:

      Pool实例

    Pool类

     一个连接池

    Pool被创建后,拥有minsize指定的空闲连接,并且能延展到maxsize制定的连接数;

    如果minsize为0,则Pool在启动时不会创建任何连接;

    如果maxsize为0,则Pool的大小无限制(但当然,它会回收已使用结束的连接);

    使用Pool的最重要的方式是获取数据库连接,用下列语句:

    with (yield from pool) as conn:
        cur = yield from conn.cursor()

    如不想使用with语句,可另行参考 Pool.acquire()Pool.release()的方式获取数据库连接。

    Pool类的属性:

    1、echo : 返回echo模式状态。 如果为True,则将所有已执行的查询记录到名为aiomysql的logger;

    2、minsize : Pool的最小大小(只读),默认为1;

    3、maxsize : Pool的最大大小(只读),默认为10;

    4、size : 当前Pool的大小(只读),包括使用的和空闲的连接;

    5、freesize : Pool中空闲连接的数目(只读);

    方法:

    1、clear()

    关闭pool

    标记所有要关闭的pool连接,已经关闭的pool不允许获得新的连接;

    如果你想等待已经获得的连接的实际关闭,请  close()方法后调用wait_closed()

    警告:该方法不是一个协程!

    2、terminate()

    终止pool,关闭pool并立即关闭所有已获取的连接。

    在terminate()方法后要调用wait_closed()来等待实际的关闭。

    警告:该方法不是一个协程!

    3、wait_closed()

    一个等待释放和关闭所有已获取连接的协程;

    应该在close()之后调用以等待实际的pool关闭。

    4、acquire()

    从空闲的pool中获取连接的协程。 根据需要创建新连接,并且pool的大小小于maxsize。

    返回一个Connection实例。

    5、release(conn)

    将连接conn转换至空闲pool中,以供将来重复利用。

    最后再贴出另一种使用connection pool方式的示例代码:

    import asyncio
    import aiomysql
    
    
    async def test_example(loop):
        pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                          user='root', password='',
                                          db='mysql', loop=loop)
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 42;")
                print(cur.description)
                (r,) = await cur.fetchone()
                assert r == 42
        pool.close()
        await pool.wait_closed()
    
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(test_example(loop))
  • 相关阅读:
    T-SQL 查询出某个列总值大于X的数据
    ASP.NET 的IP帮助类
    对于一些Http远程连接Api安全的看法;
    老生常谈之SQL Server (行转列,列转行)
    关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案
    linq to entity asp.net mvc 多字段排序
    MVC过滤器之添加LoginAttribute,浏览器提示:重定向次数太多
    层级多选框(html+javascript+bootstrap),全层全选和多选
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller 解决
    Andriod Studio adb.exe,start-server' failed -- run manually if necessary 解决
  • 原文地址:https://www.cnblogs.com/zwb8848happy/p/8809861.html
Copyright © 2011-2022 走看看