使用python MySQLdb连接纠正异常处理

时间:2014-02-12 07:15:06

标签: python error-handling innodb mysql-python

我创建了一个小/基本的python脚本来将数据插入MySQL数据库。我包含了一些错误处理 - 主要是为了关闭连接和/或在出错时防止挂起连接(......但也忽略了一些错误)。

我认为我所拥有的(见下文)是对的 - 似乎工作正常。但偶尔我会得到“连接太多”错误 - 我假设这意味着我实际上并没有正确关闭连接(或者错误处理可能不正确)。

conn=MySQLdb.connect(host=####, user=####, passwd=####, db=####)
curs=conn.cursor()
try:
    curs.execute(sql)
    conn.commit()           

except MySQLdb.Error as e:
    if e[0]!= ###:
        raise

finally: 
    curs.close()    
    conn.close()

(我也试过没有finally:

另一个(我认为重要的)观点是MySQL数据库使用的是InnoDB存储引擎。这是我第一次使用InnoDB引擎,也许MyISAM存在一些与此相关的差异,我不知道(如conn.commit(),但是出现错误)....这似乎是我所有其他问题的根源!

提前致谢

1 个答案:

答案 0 :(得分:4)

我认为问题是我没有在conn.rollback()子句中调用except(因此,连接没有正确关闭)。一行(见下文)似乎来解决这个问题(我不能确定这是否是这个问题 - 如果有人能证实那会很好)。

conn=MySQLdb.connect(host=####, user=####, passwd=####, db=####)
curs=conn.cursor()
try:
    curs.execute(sql)
    conn.commit()           

except MySQLdb.Error as e:
    conn.rollback()              #rollback transaction here
    if e[0]!= ###:
        raise

finally: 
    curs.close()    
    conn.close()