Задать вопрос
@datel

Почему не работает каскадное удаление с ondelete = 'CASCADE' sqlalchemy?

Вот модели:
class ItemInBasket(Base):
    __tablename__ = 'itemsinbaskets'
    
    id: Mapped[int] = mapped_column(primary_key=True)
    category: Mapped[str] = mapped_column(String(16))
    order_id: Mapped[str] = mapped_column(ForeignKey('orders.id', ondelete='CASCADE'))

class Order(Base):
    __tablename__ = 'orders'
    
    id: Mapped[int] = mapped_column(primary_key=True)
    user_name: Mapped[str] = mapped_column(String(256))
    tg_id: Mapped[BigInteger] = mapped_column(BigInteger)
    check_image: Mapped[str] = mapped_column(String(1024), nullable=True)
    created_at: Mapped[str] = mapped_column(String(128), nullable=True)


Вот запрос:
#Удаляем и сразу создаём
async def create_order(user_name: str, tg_id: int):
    async with async_session() as session:
        await session.execute(delete(Order).where(Order.tg_id == tg_id))
        await session.commit()
    async with async_session() as session:
        session.add(Order(user_name=user_name, tg_id=tg_id, check_image=None, created_at=None))
        await session.commit()


Вот почему при этом запросе у меня всё равно все элементы ItemInBasket не удаляются, а остаются на прежнем месте, даже когда execute использую?
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@datel Автор вопроса
В SQLite перед тем как взаимодействовать с элементами foreign key нужно включить определенную опцию

await session.execute(text('PRAGMA foreign_keys=ON'))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы