1

我看到 Flask-SQLAlchemy 出现了一些意外行为,但我不明白发生了什么:

如果我使用 MySQL Workbench 或 Sequel Pro 对记录进行更改,正在运行的应用程序(无论是在 Apache 上的 WSGI 下运行,还是从命令行运行)都不会接收到更改。如果我通过触摸 WSGI 文件或重新加载它(命令行)重新加载应用程序,我可以看到更改的记录。我已经通过all()在交互式 shell 中运行查询来验证这一点,它是相同的——在我退出 shell 并重新开始之前没有任何变化。我觉得我在这里遗漏了一些非常明显的东西——它是一个表,没有连接等——在 2.7.3 上运行 MySQL 5.5.19 和 SQLA 0.7.7

4

1 回答 1

1

您的应用程序的 SELECT 可能在其自己的事务/会话中,因此由另一个会话(例如 MySQL Workbench 连接)提交的更改对于您的 SELECT 尚不可见。您可以通过启用 mysql 常规日志或在 create_engine(...) 定义中设置“echo: false”来轻松验证它。您很有可能在 SET AUTOCOMMIT = 0 模式下启动 SQLAlchemy 会话,这需要显式提交或回滚(当您重新启动/重新加载时,Flask-SQLAlchemy 会自动为您完成)。尝试在 autocommit=true 模式下启动会话,或者在调用 SELECT 之前坚持显式提交/回滚。

于 2013-03-04T04:03:07.927 回答