所以问题是我想获得可用于其他操作的查询结果,但我得到的不是结果
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,相同的结果
如前所述,
result = await db.execute(query)
返回一个
sqlalchemy.engine.result.ChunkedIteratorResult
对象。顾名思义,它是一个迭代器,可用于使用 .one()
、.all()
、.first()
等方法检索返回值。
由于您似乎正在寻找单个
users
对象,您可以使用 检索它
author = result.scalars().one()
之后您可以访问其属性,例如
author.block
。