Python 如何使用模块化查询进行异步MySQL操作?

Python 如何使用模块化查询进行异步MySQL操作?,python,python-3.x,asynchronous,mysql-python,discord.py,Python,Python 3.x,Asynchronous,Mysql Python,Discord.py,我目前正在为一个社区驱动的活动开发一个稍微复杂的discord机器人。 我们的目标是提供一个简单的Web界面,在这个界面上,氏族可以登录并完成他们需要完成的所有事情,如注册活动、查看统计数据、查看团队等。 我刚刚完成了一些功能,这些功能将根据MySQL数据库中的一个表更新用户角色。 因为整个discord bot都是用异步代码编写的,所以我想继续使用我已经建立的模式。 我已经读过异步代码,并且知道我必须使用类似于python的AimySql模块的东西。 遗憾的是,这些文档对初学者不太友好,这就是

我目前正在为一个社区驱动的活动开发一个稍微复杂的discord机器人。 我们的目标是提供一个简单的Web界面,在这个界面上,氏族可以登录并完成他们需要完成的所有事情,如注册活动、查看统计数据、查看团队等。 我刚刚完成了一些功能,这些功能将根据MySQL数据库中的一个表更新用户角色。 因为整个discord bot都是用异步代码编写的,所以我想继续使用我已经建立的模式。 我已经读过异步代码,并且知道我必须使用类似于python的AimySql模块的东西。 遗憾的是,这些文档对初学者不太友好,这就是我在这里提出问题的原因:

我想做这样的事情:

async def queryDB(query):
  loop = asyncio.get_event_loop()
  def test_example(query):
    conn = yield from aiomysql.connect(host='127.0.0.1', port=3306,
                                       user='root', password='', db='mysql',
                                       loop=loop)

    cur = yield from conn.cursor()
    yield from cur.execute(query)
    print(cur.description)
    results = yield from cur.fetchall()
    yield from cur.close()
    conn.close()
    return results

  var = loop.run_until_complete(test_example(query))
  return var
如您所见,我希望查询是模块化的,并在函数调用中设置参数。当然,我希望返回结果,以便以后处理

此代码不断失败,错误代码为:RuntimeError:此事件循环已在运行,我不知道如何修复此问题。我如何处理循环以及如何调用函数可能存在一个问题


有人能帮忙吗?

当机器人启动时,我会得到一个连接池,并将其连接到机器人上。下面是一个运行给定查询的示例

from discord.ext.commands import Bot, is_owner

bot = Bot('!')

@bot.event
async def on_ready():
    bot.pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                       user='root', password='', db='mysql',
                                       loop=bot.loop)

@is_owner()  # Only bot owner can run this command
@bot.command()
async def query(ctx, *, q):
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute(q)
            res = await cur.fetchall()
            await ctx.send(str(res))

bot.run("token")

谢谢你的快速回复。查询函数tho中有一个小错误。你忘了在wait cur.execute中的C。工作起来像一个迷人的tho