2011-03-31 44 views
31

Si uso MySQLdb para conectarme a MySQL-Server a través de python. Creo una conexión y un cursor como estePython MySQLdb: connection.close() VS. cursor.close()

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

Cuando se realiza el procesamiento de MySQL, se debe cerrar la conexión. Ahora me pregunto: ¿Es suficiente para cerrar la conexión bydoing

connection.close() 

o tengo que cerrar el cursor y luego la conexión? De esta manera:

cursor.close() 
connection.close() 
+0

En una nota relacionada, ¿Está bien simplemente cerrar el cursor y no la conexión? –

+0

Posible duplicado de [Cuándo cerrar los cursores usando MySQLdb] (http://stackoverflow.com/questions/5669878/when-to-close-cursors-using-mysqldb) –

Respuesta

-12

Piensa menos. Usa herramientas más

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

# cursor closed. Guaranteed. 

connection.close() 
+4

¿Cuándo se debe cerrar el cursor? – accuya

+71

Tal vez sería mejor responder explícitamente la pregunta para que la gente no solo use una herramienta sin saber qué está haciendo y por qué. ¿Qué tal 'pensar más, pero usar herramientas para la conveniencia'? – BillR

+0

¡Gracias! Estaba buscando esta respuesta mucho tiempo debido a connection.cursor() no funciona. –

2

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

+2

¿Podría elaborar más? – Flimm

8

Cerrar el cursor tan pronto como haya terminado es probablemente la mejor opción, ya que no tiene uso para él nunca más. Sin embargo, no he visto nada donde sea dañino cerrarlo después de la conexión db. Pero ya que usted puede establecer como:

cursor = conn.cursor() 

Recomiendo cerrándola antes, en caso de que accidentalmente se asigna de nuevo y la conexión DB está cerrado ya que esto generará un error. Por lo tanto, es posible que desee cerrarlo primero para evitar una reasignación accidental con una conexión cerrada.

(Algunos incluso no cerrar del todo, ya que aunque sea recolectado por el recolector de basura (ver: In Python with sqlite is it necessary to close a cursor?))

Referencias: When to close cursors using MySQLdb

In Python with sqlite is it necessary to close a cursor?

Cuestiones relacionadas