我正在尝试将Aiogram3和asyncpg结合起来,但我对异步缺乏理解。
我尝试以这种方式启动数据库和机器人:
dp = Dispatcher()
adb = DB(DSN)
@dp.message(CommandStart)
async def start(message: Message):
async with adb.pool.acquire() as conn: # взять подключение из пула и потом вернуть обратно;
x = await conn.fetch('SELECT * FROM manga;')
print(x)
await message.answer('Работает.')
async def main():
bot = Bot(token=TOKEN)
await adb.connect()
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
class DB:
def __init__(self, dsn):
self.dsn = dsn
self.pool = None
async def connect(self):
self.pool = await asyncpg.create_pool(self.dsn) # создать пулл подключений;
async def close(self):
await self.pool.close()
但我意识到这里没有异步的味道,两个协程相互阻塞并按顺序工作,而不是异步。
原则上,我还没有找到任何有价值的使用示例asyncpg
,尽管该库在所有类似库中的速度似乎是无与伦比的,因为它不使用文本指令,而是通过 C 访问字节代码。
如果有任何最佳实践,我会很高兴阅读它。