|
|
1
5
tl;dr-更新是 实际提交到数据库——它们是正在进行的未提交事务的一部分。 我对您的create_engine()调用做了两个单独的更改。(除了这一行,我使用的是你发布的代码。) 第一个是
之后 第二次调用list_users():
这表明数据不是持久化的,而是保存在session对象中。 我做的第二个更改是将数据库持久化为
但是,如果现在打开我们刚刚创建的数据库并查询其内容,则可以看到添加的用户被持久化到数据库中,但年龄修改不是:
因此,对list_users()的第二个调用是从会话对象(而不是从数据库)获取其值,因为有一个正在进行的事务尚未提交。要证明这一点,请在脚本末尾添加以下行:
|
|
|
2
1
由于您声明在系统上实际使用的是MySQL,因此您看到了问题,请检查创建表时使用的引擎类型。默认值是MyISAM,它不支持ACID事务。确保您使用的是InnoDB引擎,它执行ACID事务。 您可以看到一个表使用的是哪种引擎
可以使用alter table更改表的db引擎:
|
|
|
3
1
一。例如: 为了确保(或检查)会话不提交更改,只需调用 expunge_all 在会话对象上。这很可能证明这些变化 实际承诺:
2。mysql数据库:
三。会话范围: 寻找问题 unit-of-work . 我发现 contextual sessions 两个世界中最好的一个,在方法调用的层次结构中不需要传递session对象,同时在多线程环境中获得了相当好的安全性。我用的是 地方的 会话,我知道我不想与当前运行的事务(会话)交互。 |
|
4
0
注意,create_session()的默认值与sessionmaker()相反:autoflush和expire_on_commit为False,autocommit为True。 |
|
|
5
0
我的猜测是,因为您已经提交并且正在使用同一个对象,所以每个额外的修改都会自动提交。 |
|
|
Hal · Commit语句的用法 8 年前 |
|
|
Marcus Cemes · 选择。。。用于更新在提交后选择旧数据 8 年前 |
|
|
Dawid · 红移CTA和自动提交 8 年前 |
|
|
Jsing · “SVN”是否具有像git那样挤压提交的机制? 8 年前 |
|
|
four-eyes · 从特定提交开始创建新分支 8 年前 |
|
|
Young Pattewa · 在Solr上重新加载(谷歌云) 8 年前 |