Jak usunąć rekord według identyfikatora w Flask-SQLAlchemy


128

Mam userstabelę w mojej bazie danych MySql. Ten stół ma id, namei agepola.

Jak mogę usunąć niektóre wpisy id?

Teraz używam następującego kodu:

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

Ale nie chcę wykonywać żadnego zapytania przed operacją usuwania. Czy jest na to sposób? Wiem, mogę użyć db.engine.execute("delete from users where id=..."), ale chciałbym użyć delete()metody.

Odpowiedzi:


206

Możesz to zrobić,

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

lub

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

Upewnij się, że commitdla delete()odniosły skutek.


19
upewnij się, że włożyłeś db.session.commit()do końca. gdzie db: db = SQLAlchemy(app)
Ben

Czy możesz używać IN z tą metodą?
ram4nd

10
Ostrzeżenie: takie deletenie będą kaskadowe, jeśli polegasz na kaskadowaniu w Pythonie / ORM. Najpierw musisz wysłać zapytanie do obiektu, a następnie usunąć .
nirvana-msu

5
co by się stało, gdyby Usernie istniało?
senaps

jak możemy zastąpić / rozszerzyć tę metodę delete ()? dla klasy zdefiniowanej przez użytkownika w naszym models.py w aplikacji flask.
Hossein


9

Inne możliwe rozwiązanie, szczególnie jeśli chcesz usunąć zbiorczo

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.