python MySQLdb连接的正确异常处理

2024-03-29 02:39:44 发布

您现在位置: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(),但是有一个错误)。。。。这似乎是我所有其他问题的根源!

提前谢谢


Tags: 数据引擎脚本数据库close错误mysql差异
1条回答
网友
1楼 · 发布于 2024-03-29 02:39:44

我认为问题在于我没有在except子句中调用conn.rollback()(因此,连接没有正确关闭)。有一行代码(见下文)似乎可以解决问题(我不能确切地确定是否是这个问题—如果有人能确认这一点就好了)。

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()

相关问题 更多 >