Cách xóa bản ghi theo id trong Flask-SQLAlchemy


128

Tôi có usersbảng trong cơ sở dữ liệu MySql của mình. Bảng này có id, nameagecác lĩnh vực.

Tôi có thể xóa một số bản ghi bằng cách idnào?

Bây giờ tôi sử dụng mã sau:

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

Nhưng tôi không muốn thực hiện bất kỳ truy vấn nào trước khi thực hiện thao tác xóa. Có cách nào để làm điều này? Tôi biết, tôi có thể sử dụng db.engine.execute("delete from users where id=..."), nhưng tôi muốn sử dụng delete()phương pháp.

Câu trả lời:


206

Bạn có thể làm được việc này,

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

hoặc là

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

Hãy chắc chắn để commitcho delete()có hiệu lực.


19
hãy chắc chắn rằng bạn đặt db.session.commit()cuối cùng. nơi db: db = SQLAlchemy(app)
Ben

Bạn có thể sử dụng IN với phương pháp này không?
ram

10
Cảnh báo: Như vậy deletesẽ không phân tầng nếu bạn dựa vào phân tầng trong python / ORM. Trước tiên, bạn sẽ cần phải truy vấn đối tượng, sau đó xóa .
nirvana-msu

5
điều gì sẽ xảy ra nếu Userkhông tồn tại?
senaps

làm cách nào chúng ta có thể ghi đè / mở rộng phương thức delete () này? cho một lớp Người dùng được xác định trong models.py của chúng tôi trong ứng dụng bình.
Hossein


9

Một giải pháp khả thi khác đặc biệt nếu bạn muốn xóa hàng loạt

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.