想问下 sqlalchemy1.4 的异步模式有人试过么

2021-04-02 14:36:27 +08:00
 zyxbcde

这里是一个被开发逼着写代码的菜鸡商务。

sqlalchemy 出了 1.4 以后想试试异步模式,就找了个 mysql 数据库写了几行测试。

import asyncio

from sqlalchemy.ext.asyncio import create_async_engine

from sqlalchemy.ext.asyncio import AsyncSession

async def main():

engine = create_async_engine("mysql+aiomysql://root:123456@127.0.0.1:3333/test")

session = AsyncSession(engine)

await session.execute("select * from students")

await session.close()

if name == 'main':

asyncio.run(main())

然后在 aiomysql 连接关闭的时候报错 event loop is closed,我感觉我的代码写的没问题啊,就这么三四行,然后我还不甘心把官方文档里的例子改成 aiomysql 丢进去还是一样的错。

想请试过的大神给指导下

1866 次点击
所在节点    Python
4 条回复
Te11UA
2021-04-02 14:54:11 +08:00
目测用的是 Windows
Linux 环境应该不会了
Wincer
2021-04-02 14:54:23 +08:00
没用过异步模式,但是你的写法似乎与官方文档的不太一致。https://docs.sqlalchemy.org/en/14/orm/extensions/asyncio.html,文档里是使用 async with async_session() as session: 这样来创造 session 的,你可以按文档里说的试试
zyxbcde
2021-04-02 19:28:24 +08:00
@Te11UA 怀疑过,我甚至把 python 删了重装了一遍,等回公司试试。
zyxbcde
2021-04-02 19:29:18 +08:00
@Wincer 异步模式刚出的,我也是试试,不过这里跟 with 没关系,用 with 也是一样的错。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767548

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX