ฉันจะลบแถวทั้งหมดในตารางเดียวโดยใช้ Flask-SQLAlchemy ได้อย่างไร
กำลังมองหาสิ่งนี้:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
ฉันจะลบแถวทั้งหมดในตารางเดียวโดยใช้ Flask-SQLAlchemy ได้อย่างไร
กำลังมองหาสิ่งนี้:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
คำตอบ:
Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
Flask-SQLAlchemy
ลองUser.query.delete()
เป็นquery
วัตถุเนื่องจากวัตถุ 'BaseQuery' ไม่สามารถเรียกใช้ได้ ผ่านการทดสอบและตรวจสอบแล้ว
คำตอบของ 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()
ลบบันทึกทั้งหมด
#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
models.User.query().delete()