ফ্লাস্ক-এসকিউএলএলচেমিতে আইডি দ্বারা কোনও রেকর্ড কীভাবে মুছবেন


128

আমি usersআমার MySQL ডেটাবেস টেবিল। এই টেবিলের হয়েছে 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 = SQLAlchemy(app)
বেন

আপনি এই পদ্ধতিতে IN ব্যবহার করতে পারেন?
ram4nd

10
সতর্কতা: deleteআপনি পাইথন / ওআরএম-এ ক্যাসকেডিংয়ের উপর নির্ভর করলে এগুলি ক্যাসকেড হবে না। আপনাকে প্রথমে অবজেক্টটি জিজ্ঞাসা করতে হবে এবং তারপরে মুছতে হবে
নির্বান-এমএসু

5
Userনা থাকলে কী হবে ?
সেনাপগুলি

আমরা কীভাবে এই মোছা () পদ্ধতিটিকে ওভাররাইড / প্রসারিত করতে পারি? ক্লাস ব্যবহারকারীর জন্য ফ্ল্যাশ অ্যাপ্লিকেশানে আমাদের মডেলগুলিতে সংজ্ঞায়িত করুন py
হোসেইন

35

কেবল অন্য বিকল্পটি ভাগ করতে চাই:

# 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()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.