SQLAlchemy 不会引发异常

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

我正在尝试将子类附加到父类中。问题是,即使我故意犯错误,代码也不会抛出异常,但不起作用。我在 IDE 中没有发现任何错误,因为我尝试了多个 IDE(Spyder、PyCharm、VSC),并且没有一个显示异常。我还尝试显式打印异常,但这也不起作用(尽管它在某些情况下确实有效,这完全让我大吃一惊)。此外,代码甚至没有到达我在那里设置的打印命令。这是我所拥有的:

database_append_card.py:

async def append_all(message: types.Message, state: FSMContext):
async with state.proxy() as data:
    new_card = CardBase(
        name=data['card_name'],
        front=data['front'],
        back=data['back'],
        )
await add_child_to_db(
    child=new_card,
    column=str(message.from_user.id),
    parent_class=UserBase,
    my_async_session=async_session_maker)
await bot.send_message(message.from_id, 'The card has been appended! ✅')

database_commands.py:

async def add_child_to_db(
child,
column,
parent_class,
my_async_session: AsyncSession):

""" Adds a child class to parent class """

async with my_async_session.begin() as session:
    try:
        parent = await session.execute(select(parent_class).where(parent_class.column==column))
        print(f'\n\n\n\n{parent}\n\n\n\n')
        parent.children.append(child)
    except SQLAlchemyError as exc:
        print(exc)
        raise
    finally:
        await session.close()

database_models.py:

class UserBase(Base):

""" An account for storing and accessing multiple learning cards """

__tablename__ = 'users'

id = Column(Integer, primary_key=True, autoincrement=True)
telegram_id = Column(String, unique=True)
username = Column(String(100), unique=True)
name = Column(String(200))
surname = Column(String(200))
my_cards: Mapped[list['CardBase']] = relationship()


class CardBase(Base):

""" A learning card with front and back text bound to a specific user """

__tablename__ = 'cards'

id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
user_id: Mapped[int] = mapped_column(ForeignKey('users.id', ondelete='CASCADE'),
                         nullable=False)
name = mapped_column(Text)
front = mapped_column(Text)
back = mapped_column(Text)

asyncpg==0.28.0
SQLAlchemy==2.0.19
Python 3.10.12
python error-handling sqlalchemy parent-child asyncpg
1个回答
0
投票

问题出在与我预期完全不同的领域。我只是忘记了在 FSM 函数出现之前我写了

await state.finish()
。删除它可以帮助我完成打印命令和程序的其余部分。

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