aiohttp mysql_aiohttp 怎么复用连接池

在学习Python异步编程(aiohttp和aiomysql)时,作者遇到如何在多个数据库操作中复用连接池的问题。目前的代码每次操作都会创建新的连接池。问题在于如何修改代码实现连接池的复用,以提高效率。希望得到异步编程专家的解答。
摘要由CSDN通过智能技术生成

最近,在看 python 的异步编程( asyncio )部分,在使用 aiomysql 的时候遇到了困难,已经困惑我两三天了。可能是自己资质愚钝,看了 aiomysql 的官网例子( https://github.com/aio-libs/aiomysql/tree/master/examples ),我还是没能弄懂怎么才能多个数据库操作中复用 pool。下面是我的代码

import aiomysql

import asyncio

async def select(loop, sql):

pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,

user='root', password='123456',

db='test', loop=loop)

async with pool.acquire() as conn:

async with conn.cursor() as cur:

await cur.execute(sql)

r = await cur.fetchone()

print(r)

async def insert(loop, sql):

pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,

user='root', password='123456',

db='test', loop=loop)

async with pool.acquire() as conn:

async with conn.cursor() as cur:

await cur.execute(sql)

await conn.commit()

async def main(loop):

c1 = select(loop=loop, sql='select * from minifw')

c2 = insert(loop=loop, sql="insert into minifw (name) values ('hello')")

tasks = [

asyncio.ensure_future(c1),

asyncio.ensure_future(c2)

]

return await asyncio.gather(*tasks)

if __name__ == '__main__':

cur_loop = asyncio.get_event_loop()

cur_loop.run_until_complete(main(cur_loop))

上面这样做的话,每次做数据库操作的时候,应该都会执行一次 create_pool这个操作。现在我的问题是应该怎么改上面的代码,让连接池可以复用啊?

以前没怎么接触异步编程,希望大家能解答一下我的疑惑,感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值