wake-up-neo.net

So löschen Sie einen Datensatz nach ID in Flask-SQLAlchemy

Ich habe users Tabelle in meiner MySQL-Datenbank. Diese Tabelle enthält die Felder id, name und age.

Wie kann ich einen Datensatz mit id löschen?

Jetzt benutze ich den folgenden Code:

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

Ich möchte aber vor dem Löschen keine Abfrage durchführen. Gibt es eine Möglichkeit, dies zu tun? Ich weiß, ich kann db.engine.execute("delete from users where id=...") verwenden, möchte aber die delete() -Methode verwenden.

93
Sergey

Du kannst das,

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

oder

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

Stellen Sie sicher, dass commit ist, damit delete() wirksam wird.

163
adarsh

Ich möchte nur eine andere Option teilen:

# mark two objects to be deleted
session.delete(obj1)
session.delete(obj2)

# commit (or flush)
session.commit()

http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#deleting

In diesem Beispiel funktionieren die folgenden Codes einwandfrei:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()
19
Steve

Eine weitere mögliche Lösung speziell, wenn Sie einen Stapel löschen möchten

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
2
Zaytsev Dmitry