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