web-dev-qa-db-ja.com

Flask-SQLAlchemyでIDによってレコードを削除する方法

MySqlデータベースにusersテーブルがあります。このテーブルには、idname、およびageフィールドがあります。

idでレコードを削除するにはどうすればよいですか?

ここで、次のコードを使用します。

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

しかし、削除操作の前にクエリを作成したくありません。これを行う方法はありますか? db.engine.execute("delete from users where id=...")を使用できますが、delete()メソッドを使用したいと思います。

93
Sergey

あなたはこれを行うことができます、

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

または

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

delete()を有効にするためにcommitを確認してください。

163
adarsh

別のオプションを共有したいだけです:

# 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()
19
Steve

特にバッチ削除が必要な場合の別の可能な解決策

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
2
Zaytsev Dmitry