pythonmariadbaio-mysql

Why Python MySQL Insert into the table not working?


I am using aiomysql and MariaDB. I can create a table or select data, but I can't insert data into the table. If you SELECT data with fetchall(), then it will show what you just inserted, but immediately delete from the database.

async def test_example(loop):
    pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                      user='root', password='',
                                      db='test', loop=loop)
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute("INSERT INTO `tbl`(`id`, `val`) VALUES (37, 'z');")
            print(cur.fetchall())
    pool.close()
    await pool.wait_closed()

loop = asyncio.get_event_loop()
loop.run_until_complete(test_example(loop))

Why?


Solution

  • Remove the quotes from the table and column names.

    import aiomysql
    import asyncio
    
    
    async def select(loop, sql, pool):
        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):
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute(sql)
                await conn.commit()
    
    
    async def main(loop):
        pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                          user='root', password='',
                                          db='test', loop=loop)
        c1 = select(loop=loop, sql='select * from tbl', pool=pool)
        c2 = insert(loop=loop, sql="INSERT INTO tbl(id, val) VALUES (37, 'z');", pool=pool)
    
        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))