ফ্লাস্ক-এসকিউএএচএলএলচেমি কীভাবে একটি একক সারণীতে সমস্ত সারি মুছে ফেলা যায়


100

ফ্ল্যাস্ক-এসকিউএএলএলএকেমি ব্যবহার করে আমি কীভাবে একক টেবিলের সমস্ত সারি মুছব?

এই জাতীয় কিছু খুঁজছেন:

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

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

উত্তর:


139

চেষ্টা করুন delete:

models.User.query.delete()

দস্তাবেজগুলি থেকে :Returns the number of rows deleted, excluding any cascades.


4
হুম, এটি আমার পক্ষে কাজ করেছিল তবে কেবল এটিকে এমন কিছুতে পরিবর্তন করার পরে:models.User.query().delete()
হত্যাকাণ্ড

4
আপনি যদি এর মতো কোনও ক্যোয়ারী ব্যবহার করেন তবে এটি কাজ করে না:Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
গিয়েছেন

7
মোছার পরে প্রতিশ্রুতি দিতে ভুলবেন না
কেভিন

4
আপনি ব্যবহার করে থাকেন Flask-SQLAlchemyতাহলে চেষ্টা User.query.delete()হিসাবে queryহিসাবে 'BaseQuery' অবজেক্ট callable নয় অবজেক্ট। পরীক্ষিত এবং যাচাই করা হয়েছে।
শিরীশ কদম

106

ড্যাজ ওয়ার্লোরের উত্তর স্পট অন। আপনার কোডটি ওপি'র চেয়ে আলাদাভাবে কাঠামোগত করা থাকলে এখানে কার্যকরতাটি কার্যকর হতে পারে:

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

এছাড়াও, ভুলে যাবেন না যে এই স্নিপেটের মতো আপনি প্রতিশ্রুতি না দেওয়া পর্যন্ত মুছে ফেলা কার্যকর হবে না:

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

51

ফ্লাস্ক-স্ক্ল্যাচলেমি

সমস্ত রেকর্ড মুছুন

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

মুছে ফেলা একক সারি

এখানে ডিবি হ'ল ফ্লাস্ক-এসকিউএএলএলএকএমি ক্লাস। এটি এ থেকে সমস্ত রেকর্ড মুছে ফেলবে এবং আপনি যদি সুনির্দিষ্ট রেকর্ডগুলি মুছতে চান তবে কোয়েরিতে 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.palletspro پروژې.com/en/2.x/queries/#deleting-records


4
আমিও একই ধরণের পরিস্থিতিতে আছি। আইডি 1 থেকে 4 অবধি টেবিলটিতে 4 টি রেকর্ড রয়েছে বলে আমি যখন একটি db.session.query (টেবিলের নাম) .ডিলেট () db.session.commit () করি এবং তারপর আমি যদি db.session করি .dd () আবার নতুন রেকর্ড যুক্ত করার জন্য, পরবর্তী রেকর্ডটি একটি আইডি পায় 5 আমার টেবিলটি এখন খালি থাকায়, আমি চাই যে আমার নতুন রেকর্ডগুলি এখন আবার 1 থেকে শুরু করে একটি আইডি পাবে। কিভাবে আমি এটি করতে পারব ?
qre0ct

দয়া করে এই লিঙ্কটি দেখুন stackoverflow.com/questions/23038422/…
আনন্দ ত্রিপাঠি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.