python + SQLAlchemy: verwijderen met het Session-object

Ik kom er niet helemaal uit: ik wil alle records van een tabel met een overeenkomende zoekopdracht verwijderen. Zoiets als dit.

engine = sqlalchemy.create_engine(string)
meta = MetaData(bind=engine)
meta.reflect(bind=engine, schema='myschema')
Base = automap_base(metadata=meta)
Base.prepare(engine, reflect=True)
Classes = Base.classes
Session = sessionmaker(bind=engine)
session = Session()
session.delete(plays.record_id == '123')

Maar dat werkt niet. Wat is hier het idee? Fout die ik krijg is:

error in parsing record ID 020087: Class 'sqlalchemy.sql.elements.BinaryExpression' is not mapped


Antwoord 1, autoriteit 100%

In SQL Alchemy verwijder je objecten die je krijgt met een query uit de database. Dit kun je op 2 manieren doen:

Verwijderen met zoekopdracht (geeft slechts één DELETE-instructie af):

session.query(User).filter(User.id==7).delete()
session.commit()

Verwijderen van objectinstantie die is geretourneerd door een query (geeft 2 instructies: eerst SELECT, dan DELETE):

obj=session.query(User).filter(User.id==7).first()
session.delete(obj)
session.commit()

Antwoord 2, autoriteit 30%


Alle records verwijderen

#for all records
session.query(Model).delete()
session.commit()

Eén rij verwijderd

Als u specifieke records wilt verwijderen, probeer dan de filter-clausule in de query.
bijv.

#for specific value
session.query(Model).filter(Model.id==123).delete()
session.commit()

Eén record per object verwijderen

record_obj = session.query(Model).filter(Model.id==123).first()
session.delete(record_obj)
session.commit()

https://flask-sqlalchemy.palletsprojects.com /nl/2.x/queries/#deleting-records

Other episodes