Bagaimana menghapus record dengan id di Flask-SQLAlchemy

128

Saya memiliki userstabel di database MySql saya. Tabel ini memiliki id, namedan agebidang.

Bagaimana saya bisa menghapus beberapa catatan id?

Sekarang saya menggunakan kode berikut:

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

Tetapi saya tidak ingin membuat kueri apa pun sebelum menghapus operasi. Apakah ada cara untuk melakukan ini? Saya tahu, saya bisa menggunakan db.engine.execute("delete from users where id=..."), tapi saya ingin menggunakan delete()metode.

Sergey
sumber

Jawaban:

206

Kamu bisa melakukan ini,

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

atau

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

Pastikan commituntuk delete()mulai berlaku.

adarsh
sumber
19
pastikan Anda meletakkannya db.session.commit()di akhir. dimana db: db = SQLAlchemy(app)
Ben
Bisakah Anda menggunakan IN dengan metode ini?
ram4nd
10
Peringatan: Hal deletetersebut tidak akan menurun jika Anda mengandalkan cascading di python / ORM. Anda perlu menanyakan objek terlebih dahulu, lalu menghapus .
nirvana-msu
5
apa yang akan terjadi jika Usertidak ada?
senaps
bagaimana kita bisa mengganti / memperpanjang metode delete () ini? untuk kelas yang ditentukan Pengguna di models.py kita di aplikasi flask.
Hossein
36

Hanya ingin membagikan opsi lain:

# 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

Dalam contoh ini, kode berikut akan berfungsi dengan baik:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()
Steve
sumber
Saya mendapatkan kesalahan bahwa sesi sedang digunakan
Ryan Aquino
9

Solusi lain yang mungkin khususnya jika Anda ingin menghapus batch

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