我创建了一个小/基本的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()
,但是出现错误)....这似乎是我所有其他问题的根源!
提前致谢
答案 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()