Ошибка sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically

Я пытаюсь сделать админ панель в телеграмм боте, в котором будет возможность удалять пользователей, но при удалении пользователя возникает ошибка

Traceback (most recent call last):
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 309, in _process_update
    response = await self.feed_update(bot, update, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 158, in feed_update
    response = await self.update.wrap_outer_middleware(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\middlewares\error.py", line 25, in __call__
    return await handler(event, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\middlewares\user_context.py", line 49, in __call__
    return await handler(event, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\fsm\middleware.py", line 42, in __call__
    return await handler(event, data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
    return await wrapped_inner(event, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
    return await wrapped()
           ^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 276, in _listen_update
    return await self.propagate_event(update_type=update_type, event=event, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 142, in propagate_event
    return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 137, in _wrapped
    return await self._propagate_event(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 170, in _propagate_event
    response = await router.propagate_event(update_type=update_type, event=event, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 142, in propagate_event
    return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 137, in _wrapped
    return await self._propagate_event(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 162, in _propagate_event
    response = await observer.trigger(event, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
    return await wrapped_inner(event, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
    return await wrapped()
           ^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\PycharmProjects\Telegram bot giz\app\admin.py", line 43, in yes_delete
    await delete_user_to_db(datas)
  File "C:\Users\Мурад\PycharmProjects\Telegram bot giz\app\database\requests.py", line 9, in inner
    return await func(session, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\PycharmProjects\Telegram bot giz\app\database\requests.py", line 69, in delete_user_to_db
    await session.scalar(delete(User).where(User.tg_id == datas["delete"]))
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 517, in scalar
    return await greenlet_spawn(
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 203, in greenlet_spawn
    result = context.switch(value)
             ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2410, in scalar
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2261, in _execute_internal
    return result.scalar()
           ^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\result.py", line 1544, in scalar
    return self._only_one_row(
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\result.py", line 749, in _only_one_row
    row: Optional[_InterimRowType[Any]] = onerow(hard_close=True)
                                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\cursor.py", line 2132, in _fetchone_impl
    return self.cursor_strategy.fetchone(self, self.cursor, hard_close)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\cursor.py", line 999, in fetchone
    return self._non_result(result, None)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\cursor.py", line 1049, in _non_result
    result._metadata._we_dont_return_rows(err)
  File "C:\Users\Мурад\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\cursor.py", line 1341, in _we_dont_return_rows
    raise exc.ResourceClosedError(
sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.

Вот код моего бота в котором возникла ошибка

admin.py

@admin.message(Admin(), F.text == "Удалить пользователя ❌")
async def delete_user(message: Message, state: FSMContext):
    await state.set_state(Delete.user)
    await message.answer("Введите телеграм id пользователя")




@admin.message(Delete.user)
async def delete(message: Message, state: FSMContext):
    await state.update_data(delete=message.text)
    await state.set_state(Delete.delete)
    await message.answer("Точно хотите удалить этого пользователя?", reply_markup=kb.YESandNOdelete)

@admin.message(Delete.delete, F.text == "Да, удалить пользователя ✅")
async def yes_delete(message: Message, state: FSMContext):
    data = await state.get_data()
    await state.clear()
    print(data)
    await delete_user_to_db(data)
    await message.answer("Пользователь удален ✅", reply_markup=kb.home)

requests.py

@connection
async def delete_user_to_db(session, data):
    user = await session.scalar(select(User).where(User.tg_id == data["delete"]))

    if user:
        await session.scalar(delete(User).where(User.tg_id == data["delete"]))
    await session.commit()

Ответы (1 шт):

Автор решения: Илья

В ошибке написано: Этот объект результата не возвращает запись из базы. Он был закрыт автоматически.

Вот в трейсбэке написано

File "C:\Users\Мурад\PycharmProjects\Telegram bot giz\app\database\requests.py", line 69, in delete_user_to_db
  await session.scalar(delete(User).where(User.tg_id == datas["delete"]))

Почему datas["delete"] а не data["delete"], как в коде requests.py? Так и должно быть?

→ Ссылка