# coding:utf-8
import traceback
import logging
import aiomysql
import asyncio
'''
mysql 异步版本
'''
logobj = logging.getLogger('mysql')
class Pmysql:
def __init__(self):
self.coon = None
self.pool = None
async def initpool(self):
try:
logobj.debug("will connect mysql~")
__pool = await aiomysql.create_pool(
minsize=5,
maxsize=10,
host='127.0.0.1',
port=3306,
user='root',
password='root',
db='youku',
autocommit=True)
return __pool
except:
logobj.error('connect error.', exc_info=True)
async def getCurosr(self):
conn = await self.pool.acquire()
cur = await conn.cursor()
return conn, cur
async def query(self, query, param=None):
conn, cur = await self.getCurosr()
try:
await cur.execute(query, param)
return await cur.fetchall()
except:
logobj.error(traceback.format_exc())
finally:
if cur:
await cur.close()
# 释放掉conn,将连接放回到连接池中
await self.pool.release(conn)
async def execute(self, query, param=None):
conn, cur = await self.getCurosr()
try:
await cur.execute(query, param)
if cur.rowcount == 0:
return False
else:
return True
except:
logobj.error(traceback.format_exc())
finally:
if cur:
await cur.close()
# 释放掉conn,将连接放回到连接池中
await self.pool.release(conn)
async def test():
mysqlobj = await getAmysqlobj()
# UPDATE `youku`.`person` SET `psName` = '张三丰' WHERE (`id` = '3');
exeRtn = await mysqlobj.execute("update person set psName='马云' where id = 3")
if exeRtn:
print('操作成功')
else:
print('操作失败')
async def getAmysqlobj():
mysqlobj = Pmysql()
pool = await mysqlobj.initpool()
mysqlobj.pool = pool
return mysqlobj
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(test())