2016-09-29 12 views
12

Tôi có một bảng có hàng triệu hàng. Tôi muốn xóa nhiều hàng thông qua mệnh đề in. Tuy nhiên, sử dụng mã:SQLAlchemy: Làm thế nào để bạn xóa nhiều hàng mà không cần truy vấn

session.query(Users).filter(Users.id.in_(subquery....)).delete() 

Mã trên sẽ truy vấn kết quả và sau đó thực hiện xóa. Tôi không muốn làm điều đó. Tôi muốn tốc độ.

Tôi muốn để có thể thực hiện (có tôi biết về session.execute): Delete from users where id in()

Vì vậy, câu hỏi: Làm thế nào tôi có thể tận dụng tốt nhất của hai thế giới, sử dụng ORM? Tôi có thể thực hiện xóa mà không cần phải mã hóa truy vấn không?

Trả lời

16

Đúng! Bạn có thể gọi số delete() trên đối tượng bảng với một tài sản liên quan.

Something như thế này:

stmt = Users.__table__.delete().where(Users.id.in_(subquery...))

(và sau đó đừng quên để thực thi tuyên bố: engine.execute(stmt))

source

+0

Bạn đã đúng về! Tuyệt vời. Cảm ơn nhiều! –

Các vấn đề liên quan