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