कैसे फ्लास्क- SQLAlchemy में आईडी द्वारा एक रिकॉर्ड को हटाने के लिए


128

मेरे पास usersमेरी डाटाबेस में तालिका। इस तालिका में है id, nameऔर ageखेतों।

मैं कुछ रिकॉर्ड कैसे हटा सकता हूं id?

अब मैं निम्नलिखित कोड का उपयोग करता हूं:

user = User.query.get(id)
db.session.delete(user)
db.session.commit()

लेकिन मैं ऑपरेशन डिलीट करने से पहले कोई सवाल नहीं करना चाहता। क्या इसे करने का कोई तरीका है? मुझे पता है, मैं उपयोग कर सकता हूं db.engine.execute("delete from users where id=..."), लेकिन मैं delete()विधि का उपयोग करना चाहूंगा ।

जवाबों:


206

तुम यह केर सकते हो,

User.query.filter_by(id=123).delete()

या

User.query.filter(User.id == 123).delete()

प्रभावी होने के commitलिए सुनिश्चित करें delete()


19
सुनिश्चित करें कि आप db.session.commit()अंत में डाल दिया । जहाँ db: db = SQLAlchemy(app)
बेन

क्या आप इस विधि से IN का उपयोग कर सकते हैं?
ram4nd

10
चेतावनी: deleteयदि आप अजगर / ORM में कैस्केडिंग पर भरोसा करते हैं तो यह कैस्केड नहीं करेगा। आपको पहले ऑब्जेक्ट को क्वेरी करना होगा , और फिर हटाना होगा
निर्वाण-मास

5
यदि Userमौजूद नहीं है तो क्या होगा ?
सेनाप्स

हम इस डिलीट () विधि को कैसे ओवरराइड / विस्तारित कर सकते हैं? फ्लास्क ऐप में हमारे मॉडल थ्रू में परिभाषित एक वर्ग उपयोगकर्ता के लिए।
होसैन

36

बस एक और विकल्प साझा करना चाहते हैं:

# mark two objects to be deleted
session.delete(obj1)
session.delete(obj2)

# commit (or flush)
session.commit()

http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#deleting

इस उदाहरण में, निम्नलिखित कोड ठीक काम करेंगे:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()

मुझे त्रुटि हो रही है कि सत्र उपयोग में है
रयान एक्विनो

9

एक और संभव समाधान विशेष रूप से यदि आप बैच हटाना चाहते हैं

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.