sqlalchemy数据库异步查询库用法-第一期
tornado吧
全部回复
仅看楼主
level 5
### 执行select all查询
.
async with AsyncSession() as async_session:
  stmt = build_stmt()
  result = await async_session.execute(stmt)
.
  users = result.scalars().all()
.
  for user in users:
    print(user.name, user.age)
    print(student.to_dict())
.
.
.
.
总结核心调用:
1. result = await async_session.execute(stmt)执行查询
  1.1 查询方法是execute,此方法是协程函数,需被await触发
  1.2 参数是stmt
2. result.scalar.all从result代理对象中取出数据
3. for user in users遍历查询返回的结果集
2025年12月07日 18点12分 1
level 5
重点难点
.
1. 异步sqlalchemy操作中,session.execute的返回值result对象不是Iterable的
  1.1 这一点和同步sqlalchemy操作不同。同步sqlalchemy操作中result对象是Iterable的
2. 异步sqlalchemy操作中,拿到result对象后,调用result.scalars().all()才能得到Iterable的结果集对象
2025年12月07日 18点12分 2
users = result.scalars().all()
2025年12月07日 20点12分
level 5
解释拿到AsyncResult实例对象之后的代码
.
1. AsyncResult对标Result
2. AsyncResult提供all、first、one、one_or_none这些常见方法,这一点和Result保持一致
3. 新版本的SQLAlchemy中语法改为首先调用scalars方法,然后才能调用all、first、one、one_or_none等方法
4. 调用AsyncResult.scalars.all方法取得Iterable对象后,用for item in result_iterable: process(item.name)语法遍历结果集数据
2025年12月08日 14点12分 4
for user in result.scalars().all(): print(user.name, user.age)
2025年12月08日 14点12分
level 5
解释执行查询时用到的各个操作
.
1. async with AsyncSession() as async_session:此处的AsyncSession其实是async_sessionmaker类的实例对象
  1.1 按照习惯,保存async_sessionmaker类的实例对象的变量名取名为AsyncSessionLocal更好
2. result = await async_session.execute(stmt)以Statement类的实例对象作为参数,通过AsyncSession.execute函数执行查询,返回值是AsyncResult类的实例对象
  2.1 AsyncSession.execute是协程函数,调用它时需要加await
2025年12月08日 14点12分 5
level 5
结帖咯
[酷][酷][酷]
2025年12月08日 14点12分 6
level 5
2025年12月08日 14点12分 7
1