我正在尝试将子类附加到父类中。问题是,即使我故意犯错误,代码也不会抛出异常,但不起作用。我在 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
问题出在与我预期完全不同的领域。我只是忘记了在 FSM 函数出现之前我写了
await state.finish()
。删除它可以帮助我完成打印命令和程序的其余部分。