फ्लास्क- 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.