擅长:python、mysql、java
<p>自从这个问题第一次被回答以来,发生了很多事情。</p>
<p>通过采用一种悲观的错误处理方法,您可以获得最棒的bug实现,而且非常有效。</p>
<p>创建引擎时应用<code>pool_pre_ping=True</code>,如下所示:</p>
<pre><code>engine = create_engine("mysql+pymysql://user:pw@host/db", pool_pre_ping=True)
</code></pre>
<p>查看更多信息:<a href="http://docs.sqlalchemy.org/en/latest/core/pooling.html#pool-disconnects-pessimistic" rel="nofollow noreferrer">docs.sqlalchemy.org/en/latest/core/pooling.html#pool-disconnects-pessimistic</a></p>
<hr/>
<p>另一种方法是以<strong>乐观的方式处理错误-当错误发生时。在这种情况下,可以在try-and-except中包装execute语句,如果引发异常,则使连接无效。一旦连接失效,您就可以重新实例化它。</p>
<p>查看更多信息:<a href="http://docs.sqlalchemy.org/en/latest/core/pooling.html#disconnect-handling-optimistic" rel="nofollow noreferrer">docs.sqlalchemy.org/en/latest/core/pooling.html#disconnect-handling-optimistic</a></p>
<hr/>
<p>这两种方法都适用于连接超时的情况,例如过夜/周末。它还使It操作更容易关闭数据库,并且不必太担心依赖重启的下游应用程序。如果您处理非常关键的事务,那么考虑安全事务处理(如zzzeek所述)是非常有价值的。</p>