async def execute(query):
if isinstance(query, (peewee.Select, peewee.ModelCompoundSelectQuery)):<EOL><INDENT>coroutine = select<EOL><DEDENT>elif isinstance(query, peewee.Update):<EOL><INDENT>coroutine = update<EOL><DEDENT>elif isinstance(query, peewee.Insert):<EOL><INDENT>coroutine = insert<EOL><DEDENT>elif isinstance(query, peewee.Delete):<EOL><INDENT>coroutine = delete<EOL><DEDENT>else:<EOL><INDENT>coroutine = raw_query<EOL><DEDENT>return (await coroutine(query))<EOL>
Execute *SELECT*, *INSERT*, *UPDATE* or *DELETE* query asyncronously.

    :param query: peewee query instance created with ``Model.select()``,
                  ``Model.update()`` etc.
    :return: result depends on query type, it's the same as for sync
        ``query.execute()``