फ्लास्क- SQLAlchemy एक ही तालिका में सभी पंक्तियों को कैसे हटाएं


98

फ्लास्क-एसक्यूएलकेमी का उपयोग करके मैं एक ही तालिका में सभी पंक्तियों को कैसे हटाऊं?

कुछ इस तरह की तलाश में:

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

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

जवाबों:


136

कोशिश करें delete:

models.User.query.delete()

से डॉक्स :Returns the number of rows deleted, excluding any cascades.


2
हम्म, यह मेरे लिए काम करता है, लेकिन केवल इसे कुछ इस तरह से बदलने के बाद:models.User.query().delete()
मार्थ्रश

1
यदि आप इस तरह से क्वेरी का उपयोग करते हैं तो काम नहीं करता है:Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
swade

6
हटाने के बाद कमिट करना न भूलें।
केविन

3
आप उपयोग कर रहे हैं Flask-SQLAlchemyतो कोशिश User.query.delete()के रूप में queryके रूप में 'BaseQuery' ऑब्जेक्ट प्रतिदेय नहीं है वस्तु। परीक्षण किया और सत्यापित किया गया।
शिरीष कदम

102

DazWorrall का जवाब हाजिर है। यहां एक भिन्नता है जो उपयोगी हो सकती है यदि आपका कोड ओपी की तुलना में अलग तरीके से संरचित है:

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

इसके अलावा, यह न भूलें कि जब तक आप इस स्निपेट में नहीं जाते, तब तक विलोपन प्रभावी नहीं होगा:

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

50

कुप्पी के SQLAlchemy

सभी रिकॉर्ड हटाएं

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

एकल पंक्ति को हटा दिया गया

यहाँ DB ऑब्जेक्ट फ्लास्क-SQLAlchemy क्लास है। यह उससे सभी रिकॉर्ड को हटा देगा और यदि आप विशिष्ट रिकॉर्ड हटाना चाहते हैं तो filterक्वेरी में क्लॉज़ आज़माएं । पूर्व।

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

ऑब्जेक्ट द्वारा एकल रिकॉर्ड हटाएं

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 रिकॉर्ड हैं, आईडी 1 से 4. जब मैं एक db.session.query (Table_name) .delete () db.session.commit () करता हूं और फिर अगर मैं db.session करता हूं। .add () फिर से नए रिकॉर्ड जोड़ने के लिए, अगले रिकॉर्ड को 5 की एक आईडी मिलती है। चूँकि मेरी टेबल अब खाली हो गई है, मैं चाहता हूं कि मेरे नए रिकॉर्ड अब 1 से फिर से एक आईडी शुरू करें। मैं यह कैसे कर सकता हूँ ?
qre0ct

कृपया इस लिंक को देखें stackoverflow.com/questions/23038422/…
आनंद त्रिपाठी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.