Come eliminare un record per id in Flask-SQLAlchemy


128

Ho una userstabella nel mio database MySql. Questo tavolo ha id, namee agecampi.

Come posso eliminare alcuni record id?

Ora utilizzo il seguente codice:

user = User.query.get(id)
db.session.delete(user)
db.session.commit()

Ma non voglio fare alcuna query prima dell'operazione di cancellazione. C'è un modo per fare questo? Lo so, posso usare db.engine.execute("delete from users where id=..."), ma vorrei usare il delete()metodo.

Risposte:


206

Puoi farlo,

User.query.filter_by(id=123).delete()

o

User.query.filter(User.id == 123).delete()

Assicurati di commitper delete()rendere effettive.


19
assicurati di mettere db.session.commit()alla fine. dove il db: db = SQLAlchemy(app)
Ben

Puoi usare IN con questo metodo?
ram4nd

10
Avvertenza: Tale deletenon verrà eseguito a cascata se si fa affidamento sul collegamento a cascata in python / ORM. Sarà necessario prima interrogare l'oggetto, quindi eliminare .
nirvana-msu

5
cosa succederebbe se Usernon esistesse?
senap

come possiamo sovrascrivere / estendere questo metodo delete ()? per un utente di classe definito nel nostro models.py nell'app Flask.
Hossein


9

Un'altra possibile soluzione specialmente se si desidera eliminare in batch

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.