0

The documentation of SqlModel about DELETE action: https://sqlmodel.tiangolo.com/tutorial/delete/

shows how to delete a single line using the functions

  • .one() - If only a single record is expected

or

  • .first() - to get the 1st line from multiple lines found.
def delete_heroes():
    with Session(engine) as session:
        statement = select(Hero).where(Hero.name == "Spider-Youngster")
        results = session.exec(statement)
        hero = results.one()
        print("Hero: ", hero)

        session.delete(hero)
        session.commit()

But how can I delete all the lines matching the condition? I tried using the .all() function

def delete_heroes():
    with Session(engine) as session:
        statement = select(Hero).where(Hero.name == "Spider-Youngster")
        results = session.exec(statement)
        hero = results.all()
        print("Hero: ", hero)

        session.delete(hero)
        session.commit()

But all I get is an error: sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.list' is not mapped


My solution uses a loop to iterate over multiple lines, delete each line and commit at the end.

def delete_heroes():
    with Session(engine) as session:
        statement = select(Hero).where(Hero.name == "Spider-Youngster")
        results = session.exec(statement)
        hero = results.all()
        print("Hero: ", hero)

        for result in results:
            session.delete(result)

        session.commit()

Is there a way to do this without the loop?

RaamEE
  • 3,017
  • 4
  • 33
  • 53

0 Answers0