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