Select

    要执行SELECT语句,我们用 select 函数执行,需要传入SQL语句和SQL参数:

    @asyncio.coroutine

    def select(sql, args, size=None):

    log(sql, args)

    global pool

    with (yield from
    pool) as conn:

    cur = yield from conn.cursor(aiomysql.DictCursor)

    yield from cur.execute(sql.replace('?', '%s'), args or ())

    if size:

    rs = yield from cur.fetchmany(size)

    else:

    rs = yield from cur.fetchall()

    yield from cur.close()

    logging.info('rows returned: %s' % len(rs))

    return rs

    SQL语句的占位符是 ? ,而MySQL的占位符是 %s select() 函数在内部自动替换。注意要始终坚持使用带参数的SQL,而不是自己拼接SQL字符串,这样可以防止SQL注入攻击。

    注意到 yield from 将调用一个子协程(也就是在一个协程中调用另一个协程)并直接获得子协程的返回结果。

    如果传入 size 参数,就通过 fetchmany() 获取最多指定数量的记录,否则,通过 fetchall() 获取所有记录。