Flask-SQLAlchemy에서 ID로 레코드를 삭제하는 방법


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 : db = SQLAlchemy(app)
Ben

이 방법으로 IN을 사용할 수 있습니까?
ram4nd

10
경고 : deletepython / ORM에서 캐스 케이 딩에 의존하는 경우 캐스케이드되지 않습니다. 먼저 개체쿼리 한 다음을 삭제해야 합니다.
nirvana-msu

5
경우에 어떤 일이 일어날 것입니다 User존재하지 않습니다?
senaps

이 delete () 메서드를 어떻게 재정의 / 확장 할 수 있습니까? 플라스크 앱의 models.py에 정의 된 User 클래스의 경우.
Hossein


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.