1

我尝试使用 sqlalachemy 发出异步数据库请求,如示例中所述: https ://docs.sqlalchemy.org/en/14/orm/extensions/asyncio.html#synopsis-orm在标题下:使用 AsyncSession 时防止隐式 IO。正如我从代码中了解到的那样,存在两种创建会话的方法:

  1. 使用 async_session = AsyncSession(engine, expire_on_commit=False)
  2. 或使用带有 class_=AsyncSession 参数的 sessionmaker

我的代码如下所示:

    async def setup_connection(self):
        self.logger.info("Pause to be sure that i am async")
        await asyncio.sleep(1)
        self.logger.info("Async Pause finished")
        self.logger.info("Database engine uri: %s", self.database_engine_uri)
        self.database_engine = create_async_engine(self.database_engine_uri, pool_size=self.pool_size, echo=True)

        async_session = AsyncSession(self.database_engine, expire_on_commit=False)
        self.logger.info("Before hang")
        async with async_session() as session:
            self.logger.info("Inside with")
....

在我执行我的代码后,我得到以下信息:

2021-06-17 16:07:52,942 File:database.py Function:setup_connection Line:46 Pause to be sure that i am async
2021-06-17 16:07:53,943 File:database.py Function:setup_connection Line:48 Async Pause finished
2021-06-17 16:07:53,943 File:database.py Function:setup_connection Line:49 Database engine uri: mysql+aiomysql://user:password@10.111.117.9/db
2021-06-17 16:07:53,954 File:database.py Function:setup_connection Line:53 Before hang

感觉就像代码只是挂在执行“与 async_session() 作为会话异步:”的时刻,因为下一条日志消息永远不会出现。你能帮我用正确和最简单的方法将 asyncio 与 sqlalachemy 一起使用吗?

4

0 回答 0