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
SeanPlusPlus
sumber

Jawaban:

136

Coba delete:

models.User.query.delete()

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

DazWorrall
sumber
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()
Steve Saporta
sumber
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

Anand Tripathi
sumber
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
Silakan merujuk ke tautan ini stackoverflow.com/questions/23038422/…
Anand Tripathi