代码之家  ›  专栏  ›  技术社区  ›  Krepachek

查询返回ChunkedDeformResult对象而不是ORM对象

  •  -1
  • Krepachek  · 技术社区  · 1 年前

    所以问题在于,我想得到可用于其他操作的查询结果,但我得到的不是结果<sqlalchemy.engine.result。0x000002A7F7F4A150处的ChunkedIterarResult对象>或者模型对象,你能帮帮我吗?我使用async和disconfirm.py,在没有async的aiogram中没有这样的问题,我得到了结果,能够用“log_result=log.entry_id”之类的东西获取信息 代码示例:

    async def legit(ctx):
        engine = create_async_engine("sqlite+aiosqlite:///BD.sqlite", echo = True)
        print(ctx.message.author.global_name, ctx.message.author.id, ctx.message.author.guild.name.lower(),
              "---legit check---")
        async with AsyncSession(engine) as db:
            query = sqlalchemy.select(users).where(users.user_id == ctx.message.author.id)
            result = await db.execute(query)
            print(result, "RESULT CHECK")
            if result.block == 0:
                access = True
            if result.block == 1:
                access = False
            else:
                print("error")
            await db.close()
    

    结果:

    2024-08-04 20:03:50,488 INFO sqlalchemy.engine.Engine BEGIN (implicit)
    2024-08-04 20:03:50,489 INFO sqlalchemy.engine.Engine SELECT users.id, users.username, users.user_id, users.server, users.mod, users.block 
    FROM users 
    WHERE users.user_id = ?
    2024-08-04 20:03:50,489 INFO sqlalchemy.engine.Engine [generated in 0.00010s] (317714120898248715,)
    <sqlalchemy.engine.result.ChunkedIteratorResult object at 0x000002A7F7F4A150> RESULT CHECK
    2024-08-04 20:03:50,490 INFO sqlalchemy.engine.Engine ROLLBACK
    

    尝试使用async和engine.begin()作为db,得到的结果是列表,还尝试使用MYSQL代替sqlite,结果相同

    1 回复  |  直到 1 年前
        1
  •  1
  •   Gord Thompson    1 年前

    如前所述,

    result = await db.execute(query)
    

    返回a sqlalchemy.engine.result.ChunkedIteratorResult 对象。顾名思义,它是一个迭代器,可用于使用以下方法检索返回值 .one() , .all() , .first() 等等。。

    既然你似乎在找一个单身 users 可以用对象检索它

    author = result.scalars().one()
    

    之后,您可以访问其属性,如 author.block .