擅长:python、mysql、java
<p>我在试图缩小导致异常的代码范围时找到了根本原因。在会话关闭后,我将相同的属性访问代码放在不同的位置,发现它绝对不会在查询会话关闭后立即导致任何问题。原来问题是在关闭一个新的会话(该会话已打开以更新对象)后开始出现的。一旦我了解到在会话关闭后对象的状态是不可用的,我就能够找到讨论这个问题的<a href="http://www.mail-archive.com/sqlalchemy@googlegroups.com/msg13278.html" rel="noreferrer">thread</a>。有两种解决方案:</p>
<ul>
<li>保持会话打开(这是显而易见的)</li>
<li>指定<code>expire_on_commit=False</code>到<code>sessionmaker()</code>。</li>
</ul>
<p>第三个选项是在会话创建后,在会话上手动将<code>expire_on_commit</code>设置为<code>False</code>,类似于:<code>session.expire_on_commit = False</code>。我证实这解决了我的问题。</p>