SQL alchemy 2.0.29 中会话执行结果出现问题

问题描述 投票:0回答:1

所以问题是我想获得可用于其他操作的查询结果,但我得到的不是结果或模型对象,你能帮我吗,我使用异步与discord.py,我没有这样的问题在没有异步的 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()作为数据库并得到结果但作为列表,并且还尝试使用MYSQL而不是sqlite,相同的结果

python-3.x sqlalchemy discord.py
1个回答
0
投票

如前所述,

result = await db.execute(query)

返回一个

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

由于您似乎正在寻找单个

users
对象,您可以使用

检索它
author = result.scalars().one()

之后您可以访问其属性,例如

author.block

© www.soinside.com 2019 - 2024. All rights reserved.