django transaction.commit_manually导致'MySQL服务器已经消失'

时间:2013-09-03 20:01:42

标签: python mysql django python-2.7 transactions

有一个长期运行的过程,工作正常。在添加transaction.commit()之后开始获取(2006'MySQL服务器已经消失')错误,我手动提交事务。

之前(效果很好):

DBObject.objects.get(id = 1)

之后:(在晚上闲置8小时后无法处理错误)

注意:我需要像这样冲洗它以避免过时的数据。

flush_transaction()
DBObject.objects.get(id = 1)

,其中

@transaction.commit_manually
def flush_transaction():
    """
    Flush the current transaction so we don't read stale data

    Use in long running processes to make sure fresh data is read from
    the database.  This is a problem with MySQL and the default
    transaction mode.  You can fix it by setting
    "transaction-isolation = READ-COMMITTED" in my.cnf or by calling
    this function at the appropriate moment
    """
    transaction.commit()

据我了解,我正在切换到commit_manually,但似乎我也失去了django的自动重新连接。

除了在mysql端增加wait_timeout之外,还有一种很好的处理方法吗?

1 个答案:

答案 0 :(得分:1)

问题在于切换到commit_manual模式。似乎没有正确关闭连接。详细了解django and database connection

解决问题的方法是手动关闭数据库连接并再次尝试查询。

手动关闭我使用的连接

from django import db
db.close_connection()

希望这是有帮助的