aiomysql inserting operation failed !

emotions:

those days,i am using aiomysql(python3.5) to acess my database .But a 'strange' problem make me trouble more times.The problem is i can't insert data into my database table using aiomysql's cursor.execute(**) method. Fortunately,i sovled it after refering aiomysq's manual.

plateform:

1.ubuntu14.04
2.python3.5

error code:

import aiomysql 
import asyncio

loop=asyncio.get_event_loop()
@asyncio.coroutine
def insert(loop):
        pl=yield from aiomysql.create_pool(host='127.0.0.1',user='root',password='xxxxx',db='blog',loop=loop,port=3306)
        with (yield from pl) as con:
                cursor=yield from con.cursor()
                yield from cursor.execute('insert into users(`user_name`,`email`,`password`) values("coder","1xxxxxb@gmail.com","FHEUIE@#@@##JNDJA")')
                yield from cursor.close()
                con.commit()
        pl.close()
        yield from pl.wait_closed()

loop.run_until_complete(insert(loop))
loop.run_forever()

I run the above code many times,but there is still no data in my database table.

solution:

After refering aiomysql's manual,I found 'aiomysql.commit' method is coroutine,that's a critical point.just rewrite 'con.commit()' to 'yield from con.commit()',the problem is sovled!

correct code:

import aiomysql 
import asyncio

loop=asyncio.get_event_loop()
@asyncio.coroutine
def insert(loop):
        pl=yield from aiomysql.create_pool(host='127.0.0.1',user='root',password='xxxxx',db='blog',loop=loop,port=3306)
        with (yield from pl) as con:
                cursor=yield from con.cursor()
                yield from cursor.execute('insert into users(`user_name`,`email`,`password`) values("coder","1xxxxxb@gmail.com","FHEUIE@#@@##JNDJA")')
                yield from cursor.close()
                yield from con.commit()
        pl.close()
        yield from pl.wait_closed()

loop.run_until_complete(insert(loop))
loop.run_forever()

posted on 2016-03-12 16:04  yeah,youcandoit  阅读(492)  评论(0编辑  收藏  举报

导航