SQLAlchemyにて、以下のように複数件レコードを一度にDeliteしようとした際、エラーが出た。
ソース:
user_id = session['auth.user']['id']
post = Post.query.filter(Post.user_id == user_id).all()
db.session.delete(i)
db.session.commit()
エラー文:
sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.list’ is not mapped
※やりたかった内容としては、セッションで保持しているuser_idと合致するuser_idをもつ、Postテーブル内のすべてのレコードを削除すること
原因:
「.all」で、条件に合致するすべてのデータセットを取得しているが、そのうちのどれを削除すればよいのかわからない、というのが原因。
※実際、複数データ取得できた場合でも、1つのデータしかない場合でも、変わらずこのエラーが出るっぽい
対応:以下のように、for文を使って、1データに対し1回Deliteを行う形式にする。(CommitはすべてのDeliteを行った後、1回行うだけでよい)
user_id = session['auth.user']['id']
post = Post.query.filter(Post.user_id == user_id).all()
for i in post:
db.session.delete(i)
db.session.commit()