Ошибка 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? Так и должно быть?