python - SQLAlchemy 使用路由查询错误的表

标签 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 constraint failed: post.user_id [SQL: UPDATE post SET user_id=? WHERE post.id = ?] [parameters: (None, 2)] (Background on this error at: http://sqlalche.me/e/gkpj)

最佳答案

如果用户仍有关联的帖子,则无法删除该用户,因为这些帖子不会有被您的 Post 禁止的作者。模型。您可以通过先删除用户帖子,然后删除用户,或者通过设置 nullable 来防止这种情况发生。参数Trueuser_id Post 中的列型号

我认为像这样的感谢应该有效:

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

关于python - SQLAlchemy 使用路由查询错误的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58641035/

相关文章:

python - -u、-m 参数的作用是什么?

python - matplotlib 日志轴 : display powers of 10 only

python-3.x - 从 Jenkinsfile 中的 docker 镜像激活 conda 环境

python - 在处理 Flask 请求的同一服务器上运行 Celery 任务

python - 在numpy矩阵中查找最大列值的行索引

python - django queryset aggregation count 计数错误

python - 如何在不在 Python 中实例化的情况下获取类的类型?

python - 在Python中对RGB值进行分类

javascript - 在 Python 中访问 Jquery 键/值

linux - 通过 Flask 内存泄漏的 Tensorflow Inception 模型