Python MySQLdb: połączenie.close () VS. cursor.Zamknij()

Jeśli używam MySQLdb do łączenia się z serwerem MySQL przez Python. Tworzę connection i cursor w ten sposób:

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

Po zakończeniu przetwarzania MySQL należy zamknąć connection. Teraz się zastanawiałem: czy wystarczy zamknąć connection robiąc:

connection.close()

Czy muszę najpierw zamknąć cursor, a potem connection? Tak:

cursor.close()
connection.close()
Author: Filipp W., 2011-03-31

3 answers

Myśl mniej. Używaj więcej narzędzi.

from contextlib import closing
with closing( connection.cursor() ) as cursor:
    ... use the cursor ...

# cursor closed.  Guaranteed.

connection.close()
 -20
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-31 18:59:31

Zamknięcie kursora, jak tylko skończysz z nim jest prawdopodobnie najlepszym rozwiązaniem, ponieważ nie masz już z niego pożytku. Jednak nie widziałem nic, gdzie jest szkodliwe, aby zamknąć go po połączeniu db. Ale skoro można ustawić go jako:

cursor = conn.cursor()

Zalecam zamknięcie go wcześniej, na wypadek, gdybyś przypadkowo przypisał go ponownie i połączenie DB zostanie zamknięte, ponieważ spowodowałoby to błąd. Możesz więc najpierw zamknąć , aby zapobiec przypadkowemu przyporządkowaniu do zamkniętego połączenie.

(niektórzy nawet go nie zamykają, ponieważ jest zbierany przez garbage collector (zobacz: w Pythonie z sqlite czy konieczne jest zamknięcie kursora?))

Bibliografia: kiedy zamknąć Kursory za pomocą MySQLdb

W Pythonie z sqlite czy konieczne jest zamknięcie kursora?

 10
Author: lohiaguitar91,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:28

Zamknięcie połączenia powinno być wystarczająco dobre w tym konkretnym kontekście. Jeśli pracujesz z wieloma kursorami itp. musisz dbać o właściwe zarządzanie zasobami.

 3
Author: Andreas Jung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-31 18:14:08