每当我尝试执行
main.py
中的语句时,我都会进行会话回滚。在 db_commands.py
中,我有 except: raise
子句,它应该允许我捕获导致回滚的任何错误,例如IntegrityError,但由于某种原因代码没有引发异常。我仔细阅读了有关 SQLAlchemy 核心异常的文档和 except: raise
的背景,以及 stackoverflow 上的合适建议问题,包括 this,但没有发现这种情况不会发生的原因。我想到的唯一原因是首先导入所有异常。如果是,如何将它们与 except: raise
子句正确集成?如果这可能是任何原因的原因,我会使用 Spyder IDE
。
db_commands.py:
from sqlalchemy.exc import SQLAlchemyError
...
async def retrieve_data_from_db(query, my_async_session: AsyncSession):
""" Connects to the database and returns the results for a given query """
async with my_async_session.begin() as session:
try:
executed_query = await session.execute(query)
except SQLAlchemyError:
raise
finally:
await session.close()
return executed_query
main.py:
query = select(UserBase).where(UserBase.telegram_id == telegram_id)
result = await retrieve_data_from_db(query, async_session_maker)
asyncpg==0.28.0
SQLAlchemy==2.0.19
由于某种原因,Spyder 没有提供错误的背景信息。制作它
except SQLAlchemyError as exc:
print(exc)
raise
显示了错误,现在我可以处理它了。