[解決済み] 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()
を呼び出すことは通常必要ありません。 .
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonの辞書にあるスレッドセーフについて