2011-03-31 67 views
31

如果我使用MySQLdb通過python連接到MySQL服務器。我創建了一個連接和一個這樣的光標Python MySQLdb:connection.close()VS. cursor.close()

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

當MySQL處理完成後,應關閉連接。現在,我在想:是不是足以關閉bydoing

connection.close() 

連接,或者我必須先關閉光標,然後連接?像這樣:

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

在一個相關的說明,關閉光標而不是連接可以嗎? – 2016-10-25 12:23:51

+0

可能重複[何時使用MySQLdb關閉遊標](http://stackoverflow.com/questions/5669878/when-to-close-cursors-using-mysqldb) – 2017-03-23 00:26:07

回答

-12

想少。更多地使用工具。

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

# cursor closed. Guaranteed. 

connection.close() 
+4

那麼光標何時應該關閉? – accuya 2012-12-27 03:20:56

+71

也許最好明確回答這個問題,這樣人們就不會在不知道自己在做什麼以及爲什麼的情況下使用工具。怎麼樣想'更多,但爲了方便使用工具'? – BillR 2013-06-08 14:52:29

+0

謝謝!由於connection.cursor()不起作用,我一直在尋找這個答案。 – 2013-06-17 18:03:56

2

在這個特定的上下文中關閉連接應該足夠好。 如果您使用多個遊標等,則需要關心適當的資源管理。

+2

可以詳細說明嗎? – Flimm 2013-02-25 21:02:40

8

只要完成它就關閉光標可能是最好的選擇,因爲你已經沒有用了。不過,我還沒有看到任何在db連接後關閉它的地方。但是,因爲你可以將其設置爲:

cursor = conn.cursor() 

我建議之前關閉它,如果你不小心再次分配它與數據庫連接被關閉,因爲這會引發錯誤。因此,您可能需要先關閉它第一個以防止意外重新分配關閉連接。

(有的甚至不關閉它雖然在所有它就會被垃圾收集器收集(參見:In Python with sqlite is it necessary to close a cursor?))

參考文獻: When to close cursors using MySQLdb

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