Python MySQLdb: connection.close () VS. cursor.close ()

Если я использую MySQLdb для подключения к MySQL-серверу через Python. Я создаю connection и cursor, как это:

connection = MySQLdb.connect(...)
cursor = connection.cursor()
# process

Когда MySQL-обработка завершена, нужно закрыть connection. Теперь мне было интересно: достаточно ли закрыть connection, выполнив:

?
connection.close()

или мне нужно сначала закрыть cursor, а затем connection? Как это:

cursor.close()
connection.close()
вопрос задан 31.03.2011
Aufwind
8377 репутация

3 ответов


  • 10 рейтинг

    Лучше всего закрывать курсор, как только вы закончите с ним, так как он вам больше не нужен. Тем не менее, я не видел ничего такого, где было бы вредно закрывать его после соединения с БД. Но так как вы можете установить его как:

    cursor = conn.cursor()
    

    Я рекомендую закрыть его раньше, если вы случайно назначите его снова и соединение с БД будет закрыто, так как это приведет к ошибке. Таким образом, вы можете захотеть закрыть его сначала , чтобы предотвратить случайное переназначение при закрытом соединении.

    (Некоторые даже не закрывают его, хотя он собирается сборщиком мусора (см .: В Python с sqlite необходимо ли закрывать курсор? ))

    Ссылки: Когда закрывать курсоры с помощью MySQLdb

    В Python с sqlite нужно ли закрывать курсор?

    ответ дан lohiaguitar91, с репутацией 427, 15.07.2013
  • 3 рейтинг

    Закрытие соединения должно быть достаточно хорошим здесь, в этом конкретном контексте. Если вы работаете с несколькими курсорами и т. Д. Вы должны заботиться о правильном управлении ресурсами.

    ответ дан Andreas Jung, с репутацией 1, 31.03.2011
  • -19 рейтинг

    Думай меньше. Используйте инструменты больше.

    from contextlib import closing
    with closing( connection.cursor() ) as cursor:
        ... use the cursor ...
    
    # cursor closed.  Guaranteed.
    
    connection.close()
    
    ответ дан S.Lott, с репутацией 309793, 31.03.2011