Flask-SQLAlchemy วิธีการลบแถวทั้งหมดในตารางเดียว


101

ฉันจะลบแถวทั้งหมดในตารางเดียวโดยใช้ Flask-SQLAlchemy ได้อย่างไร

กำลังมองหาสิ่งนี้:

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

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

คำตอบ:


140

ลองdelete:

models.User.query.delete()

จากเอกสาร :Returns the number of rows deleted, excluding any cascades.


2
อืมใช้ได้ผลสำหรับฉัน แต่หลังจากเปลี่ยนเป็นแบบนี้เท่านั้น:models.User.query().delete()
killthrush

1
ใช้ไม่ได้ถ้าคุณใช้ข้อความค้นหาเช่นนี้Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
swade

7
อย่าลืมผูกมัดหลังจากลบ
Kevin

3
หากคุณกำลังใช้Flask-SQLAlchemyลองUser.query.delete()เป็นqueryวัตถุเนื่องจากวัตถุ 'BaseQuery' ไม่สามารถเรียกใช้ได้ ผ่านการทดสอบและตรวจสอบแล้ว
Shirish Kadam

108

คำตอบของ DazWorrall อยู่ตรงจุด นี่คือรูปแบบที่อาจเป็นประโยชน์หากโค้ดของคุณมีโครงสร้างแตกต่างจาก OP:

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

นอกจากนี้อย่าลืมว่าการลบจะไม่มีผลจนกว่าคุณจะยอมรับดังเช่นในตัวอย่างนี้:

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

53

กระติกน้ำ - Sqlalchemy

ลบบันทึกทั้งหมด

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

ลบแถวเดียว

ที่นี่ DB คือคลาส Flask-SQLAlchemy ของอ็อบเจ็กต์ มันจะลบระเบียนทั้งหมดออกจากมันและถ้าคุณต้องการลบระเบียนเฉพาะให้ลองใช้filterประโยคในแบบสอบถาม เช่น

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

ลบ Single Record ตาม Object

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
ฉันอยู่ในสถานการณ์คล้าย ๆ กัน สมมติว่ามีระเบียน 4 รายการในตาราง ณ ตอนนี้ตั้งแต่ id 1 ถึง 4 เมื่อฉันทำ db.session.query (Table_name) .delete () db.session.commit () แล้วถ้าฉันทำ db.session .add () อีกครั้งเพื่อเพิ่มระเบียนใหม่ระเบียนถัดไปจะได้รับ id เป็น 5 เนื่องจากตารางของฉันว่างเปล่าฉันต้องการให้ระเบียนใหม่ของฉันได้รับ id โดยเริ่มจาก 1 อีกครั้ง ฉันจะทำเช่นนี้ได้อย่างไร?
qre0

โปรดดูที่ลิงค์นี้stackoverflow.com/questions/23038422/…
อานันท์ไตรพาธี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.