1
0

【備忘録】SQLAlchemyで複数件レコードを一度にDeliteしようとした際のエラー

Posted at

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()

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0