Flask-SQLAlchemy cara menghapus semua baris dalam satu tabel


98

Bagaimana cara menghapus semua baris dalam satu tabel menggunakan Flask-SQLAlchemy?

Mencari sesuatu seperti ini:

>>> users = models.User.query.all()
>>> models.db.session.delete(users)

# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped

Jawaban:


136

Coba delete:

models.User.query.delete()

Dari dokumen :Returns the number of rows deleted, excluding any cascades.


2
Hmm, ini berhasil untuk saya, tetapi hanya setelah mengubahnya menjadi seperti ini:models.User.query().delete()
killthrush

1
Tidak berfungsi jika Anda menggunakan kueri seperti ini:Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
swade

6
Jangan lupa berkomitmen setelah menghapus.
Kevin

3
Jika Anda menggunakan Flask-SQLAlchemymaka coba User.query.delete()sebagai queryobjek karena objek 'BaseQuery' tidak dapat dipanggil. Diuji dan diverifikasi.
Shirish Kadam

102

Jawaban DazWorrall tepat. Berikut adalah variasi yang mungkin berguna jika kode Anda memiliki struktur yang berbeda dari OP:

num_rows_deleted = db.session.query(Model).delete()

Selain itu, jangan lupa bahwa penghapusan tidak akan berlaku hingga Anda berkomitmen, seperti dalam cuplikan ini:

try:
    num_rows_deleted = db.session.query(Model).delete()
    db.session.commit()
except:
    db.session.rollback()

50

Flask-Sqlalchemy

Hapus Semua Rekaman

#for all records
db.session.query(Model).delete()
db.session.commit()

Baris Tunggal Dihapus

di sini DB adalah objek kelas Flask-SQLAlchemy. Ini akan menghapus semua catatan darinya dan jika Anda ingin menghapus catatan tertentu maka coba filterklausa dalam kueri. ex.

#for specific value
db.session.query(Model).filter(Model.id==123).delete()
db.session.commit()

Hapus Rekaman Tunggal berdasarkan Objek

record_obj = db.session.query(Model).filter(Model.id==123).first()
db.session.delete(record_obj)
db.session.commit()

https://flask-sqlalchemy.palletsprojects.com/en/2.x/queries/#deleting-records


1
Saya berada dalam situasi yang serupa. Katakanlah ada 4 record dalam tabel saat ini, dari id 1 sampai 4. Ketika saya melakukan db.session.query (Table_name) .delete () db.session.commit () dan kemudian jika saya melakukan db.session .add () lagi untuk menambahkan record baru, record berikutnya mendapatkan id 5. Karena tabel saya sekarang kosong, saya ingin record baru saya sekarang mendapatkan id mulai dari 1 lagi. Bagaimana saya bisa melakukan ini?
qre0ct

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.