在使用 SQLAlchemy 的 Flask 应用程序中,是否可以将 `session.rollback` 永久放在应用程序的开头?

KH

我是 Flask 和 Web 开发的新手。我有一个使用 SQLAlchemy 的 Flask Web 应用程序,是否可以放在session.rollback应用程序的开头以便即使在事务失败后也保持运行在我尝试删除一张表的记录后,我的网站停止工作时出现问题。错误日志显示删除失败,因为另一个表中的条目仍然引用这些记录作为它们的外键。错误日志建议使用session.rollback为了回滚这个更改,所以我把它放在我的应用程序的开头,在绑定我的数据库并创建会话并且我的网站工作之后。这给了我将那条线留在那里的提示。我的举动是否正确、安全且没问题?如果这有点危及我网站的功能或逻辑,谁能告诉我正确的做法是什么?

马兰88

我想说的是,根据定义,您是Cargo cult 编码,应该首先尝试确定为什么会发现这些错误,而不是仅仅包含一些您不理解的原因的代码。

您描述的问题是使用外键来确保数据库中的数据完整性的结果。通常,SQLAlchemy 会使所有依赖的外键无效,但由于我对您的设置一无所知,因此无法解释为什么不是。这可能是数据库之间的差异。

将回滚放在路由(或整个全局应用程序)的开头的一个大问题是您可能会回滚您不想回滚的数据。您还没有提供MVCE,因此没有人可以真正帮助您调试问题。

在这种情况下使用 Cargo cult 编码是可以理解的,但这从来都不是一个好的做法。要解决此问题,请研究SQLAlchemy 中级联此外,启动您的实际 SQL db 接口并查看数据的结构,并SQLALCHEMY_ECHO = 1在您的配置文件中设置以查看实际发出的内容。

祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章