Я создал небольшой/основной скрипт python для вставки данных в базу данных MySQL. Я включил некоторую обработку ошибок - главным образом, чтобы закрыть соединение и/или предотвратить зависание соединений в случае ошибки (... но также игнорировать некоторые ошибки).Исправлена обработка исключений с использованием соединения python MySQLdb
Я думал, что у меня было (см. Ниже) было правильно - казалось, что все в порядке. Но иногда я получаю ошибки «Слишком много соединений», которые, как я полагаю, означает, что я вообще не закрываю соединение правильно (или, возможно, обработка ошибок неверна).
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()
, но для ошибки) .... Это, кажется, источник всех мои другие проблемы!
Заранее спасибо
Вы должны удалить 'conn.close()' из тела 'try', так как он будет вызываться _allways_ внутри тела' finally'. Помимо этого, похоже, что вы правильно освобождаете свои подключения. – lanzz
Спасибо Lanzz - извините, что я сделал ошибку при копировании кода (играл без 'finally:' и имел 'conn.close()' в 'try' body ** и ** тело' except'). Устранил вопрос (все еще есть одна и та же проблема, в любом случае) – djmac