1. ホーム
  2. python

[解決済み] Python データベース接続 閉じる

2023-06-20 04:22:43

質問

以下のコードを使用すると、接続が開いたままになりますが、どのように閉じればよいのでしょうか。

import pyodbc
conn = pyodbc.connect('DRIVER=MySQL ODBC 5.1 driver;SERVER=localhost;DATABASE=spt;UID=who;PWD=testest') 

csr = conn.cursor()  
csr.close()
del csr

どのように解決するのですか?

コネクションには close メソッドがあります。これは PEP-249 (Python Database API Specification v2.0) で規定されています。

import pyodbc
conn = pyodbc.connect('DRIVER=MySQL ODBC 5.1 driver;SERVER=localhost;DATABASE=spt;UID=who;PWD=testest') 

csr = conn.cursor()  
csr.close()
conn.close()     #<--- Close the connection


のため pyodbc 接続 そして カーソル はどちらもコンテキスト・マネージャであるため、現在ではこのように書いた方が便利(かつ好ましい)でしょう。

import pyodbc
conn = pyodbc.connect('DRIVER=MySQL ODBC 5.1 driver;SERVER=localhost;DATABASE=spt;UID=who;PWD=testest') 
with conn:
    crs = conn.cursor()
    do_stuff
    # conn.commit() will automatically be called when Python leaves the outer `with` statement
    # Neither crs.close() nor conn.close() will be called upon leaving the `with` statement!! 

参照 https://github.com/mkleehammer/pyodbc/issues/43 を参照してください。

元のコードと違って、これは conn.commit() が呼び出されることに注意してください。外側の with ステートメントを使って、いつ commit が呼ばれるようにします。


また、このメソッドを使うかどうかに関わらず、このメソッドに含まれる with ステートメントを使用するかどうかに関係なく、1つの ドキュメントでは ,

接続は削除されたとき (通常はスコープ外に出たとき) に自動的に閉じられるので、通常は [ conn.close() を呼び出す必要はありませんが、必要であれば明示的に接続を閉じることができます。

と同様に カーソルの場合 (を追加しました(私の強調)。

カーソルは削除されたとき (通常はスコープ外に出たとき) に自動的に閉じられます。 というわけで、[ csr.close() を呼び出すことは通常必要ありません。 .