Python MySQLdb: conexión.cerrar() VS. cursor.cerca()


Si utilizo MySQLdb para conectarme a MySQL-Server a través de Python. Creo un connection y un cursor así:

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

Cuando se realiza el procesamiento de MySQL se debe cerrar el connection. Ahora me preguntaba: ¿Es suficiente cerrar el connection haciendo:

connection.close()

O tengo que cerrar el cursor primero y luego el connection? Así:

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

3 answers

Piensa menos. Usa más herramientas.

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 18:59:31

Cerrar el cursor tan pronto como haya terminado con él es probablemente la mejor apuesta, ya que ya no tiene uso para él. Sin embargo, no he visto nada donde sea dañino cerrarlo después de la conexión de la base de datos. Pero ya que se puede establecer como:

cursor = conn.cursor()

Recomiendo cerrarlo antes, en caso de que accidentalmente lo asigne de nuevo y la conexión de la base de datos se cierre, ya que esto lanzaría un error. Por lo tanto, es posible que desee cerrarlo primero para evitar una reasignación accidental con un relación.

(Algunos ni siquiera lo cierran en absoluto, ya que es recogido por el recolector de basura (ver: En Python con sqlite ¿es necesario cerrar un cursor?))

Referencias: Cuándo cerrar cursores usando MySQLdb

En Python con sqlite ¿es necesario cerrar el cursor?

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:28

Cerrar una conexión debería ser suficiente aquí en este contexto particular. Si está trabajando con varios cursores, etc. debe preocuparse por la administración adecuada de los recursos.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 18:14:08