SQLAlchemy使用路由查询错误的表

时间:2019-10-31 10:13:24

标签: python python-3.x flask sqlalchemy flask-sqlalchemy

我正在尝试通过下面的表单操作按钮传递user_id

<form action="{{ url_for('users.user_delete', user_id=user.id)}}" method="POST">
     <input type="submit" class="btn btn-danger" value="Delete">
</form>

然后我正在使用以下路线查询用户并从数据库中删除

@users.route("/user/<int:user_id>/delete",methods=['POST'])
@login_required
def user_delete(user_id):
   user = User.query.filter_by(id=user_id).first()
   db.session.delete(user)
   db.session.commit()
   flash("User has been deleted", "success")
   return redirect(url_for('users.admin_panel'))

但是,由于某种原因,它正在查询另一个表,这就是错误:

  

sqlalchemy.exc.IntegrityError sqlalchemy.exc.IntegrityError:   (sqlite3.IntegrityError)NOT NULL约束失败:post.user_id   [SQL:UPDATE后,SET user_id =? WHERE post.id =?] [参数:(无,   2)](此错误的背景位于:http://sqlalche.me/e/gkpj

1 个答案:

答案 0 :(得分:1)

如果该用户仍然有与之相关的帖子,则无法删除,因为该帖子不会包含Post模型所禁止的作者。您可以先删除用户帖子,然后再删除用户,或者通过在nullable模型的True列中将user_id参数设置为Post来防止这种情况

我想谢谢这样的事情应该起作用:

user = User.query.filter_by(id=user_id).first()
db.session.delete(user.posts)
db.session.delete(user)
db.session.commit()