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

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

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

Cuando se realiza el procesamiento de MySQL, se debe cerrar la connection . Ahora me preguntaba: ¿Basta con cerrar la connection haciendo:

 connection.close() 

¿O tengo que cerrar el cursor primero y luego la connection ? Me gusta esto:

 cursor.close() connection.close() 

Utilice with , esta herramienta le permite crear un cursor temporal que se cerrará una vez que regrese a su nivel de sangría anterior.

 from contextlib import closing with closing( connection.cursor() ) as cursor: (indented) use the cursor (non-indented) cursor is closed. connection.close() 

Cerrar el cursor tan pronto como haya terminado es probablemente la mejor opción, ya que ya no tiene ningún uso. Sin embargo, no he visto nada donde sea dañino cerrarlo después de la conexión de db. Pero como puedes configurarlo como:

 cursor = conn.cursor() 

Recomiendo cerrarlo antes, en caso de que lo vuelva a asignar accidentalmente y la conexión DB se cierre, ya que esto generaría un error. Por lo tanto, es posible que desee cerrarlo primero para evitar una reasignación accidental con una conexión cerrada.

(Algunos ni siquiera lo cierran en absoluto a medida que el recolector de basura lo recolecta (ver: ¿ En Python con sqlite es necesario cerrar un cursor? ))

Referencias: Cuándo cerrar cursores usando MySQLdb

¿En Python con sqlite es necesario cerrar un cursor?

Reiteraré las mejores prácticas para todos los que se encuentren con la conexión sql usando MySQLdb o cualquier otro paquete para conectar python2 / 3.

(Después de la ejecución simulada se supone que tiene una tabla llamada tablename en su base de datos sql. Tiene 4 columnas / campos con los nombres field1, field2, field3, field4). Si su conexión es local (la misma máquina) es 127.0.0.1, también conocida como “localhost”.

El proceso es ser simple 7 pasos.

  1. Crear conexion
  2. Crea cursor
  3. Crear cadena de consulta
  4. Ejecutar la consulta
  5. Comprometerse con la consulta.
  6. Cierra el cursor
  7. Cierra la conexion

Aquí es un simple paso a paso simulacro de ejecución

 mydb = MySQLdb.connect(host=host, user=user, passwd=passwd, db=database, charset="utf8") cursor = mydb.cursor() query = "INSERT INTO tablename (text_for_field1, text_for_field2, text_for_field3, text_for_field4) VALUES (%s, %s, %s, %s)" cursor.execute(query, (field1, field2, field3, field4)) mydb.commit() cursor.close() mydb.close() 

La conexión y el cursor son diferentes. la conexión se encuentra en el nivel SQL, mientras que el cursor se puede considerar como un elemento de datos. Puede tener varios cursores en los mismos datos dentro de una sola conexión. Es un hecho inusual tener múltiples conexiones a los mismos datos desde la misma computadora.

Más se ha descrito aquí “El paradigma del cursor no es específico de Python, pero es una estructura de datos frecuente en las bases de datos.

Dependiendo de la implementación subyacente, puede ser posible generar varios cursores que comparten la misma conexión a una base de datos. Cerrar el cursor debería liberar recursos asociados a la consulta, incluidos los resultados que nunca se obtuvieron de la base de datos (o recuperados pero no utilizados), pero no eliminaría la conexión a la base de datos, por lo que podría obtener un nuevo cursor en la misma base de datos. sin la necesidad de autenticarse de nuevo “.

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