「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で MySQL クライアントを MySQLdb および MySQL Connector/Python に再接続するにはどうすればよいですか?

Python で MySQL クライアントを MySQLdb および MySQL Connector/Python に再接続するにはどうすればよいですか?

2024 年 11 月 15 日に公開
ブラウズ:290

How to Reconnect MySQL Clients in Python with MySQLdb and MySQL Connector/Python?

MySQL クライアントと MySQLdb の再接続

データベース接続の領域では、中断のないデータ アクセスのために永続的な接続を維持することが重要です。 MySQL データベースとインターフェースするための人気のある Python ライブラリである MySQLdb は、接続が失敗した場合にクライアントを自動的に再接続する方法を提供します。

以前のバージョンで自動再接続を有効にする

MySQLdb の以前のバージョンでは、以下に示すように、自動再接続機能は mysql_options() 関数を通じてアクティブ化できました。

my_bool reconnect = 1
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect)

ただし、MySQL Connector/Python の出現により、基礎となる実装が変更され、このアプローチは適用できなくなりました。

次の解決策MySQL Connector/Python

MySQL Connector/Python で自動再接続を実現するには、Cursor オブジェクトの動作をカスタマイズする必要があります。次のコード スニペットは、このアプローチを示しています。

import MySQLdb

class DB:
  conn = None

  def connect(self):
    self.conn = MySQLdb.connect()

  def query(self, sql):
    try:
      cursor = self.conn.cursor()
      cursor.execute(sql)
    except (AttributeError, MySQLdb.OperationalError):
      self.connect()
      cursor = self.conn.cursor()
      cursor.execute(sql)
    return cursor

db = DB()
sql = "SELECT * FROM foo"
cur = db.query(sql)
# wait a long time for the Mysql connection to timeout
cur = db.query(sql)
# still works

説明

このコードは、Cursor.execute() メソッドをラップするカスタム query() メソッドを定義します。接続エラー (AttributeError または MySQLdb.OperationalError) が発生した場合、query() メソッドはデータベースへの再接続を試行し、クエリを再実行します。

この自動再接続メカニズムをCursor オブジェクトを使用すると、MySQL 接続が断続的に失われた場合でも、Python スクリプトが動作し続けることを保証できます。このアプローチは、データベース接続を維持するためのより堅牢で信頼性の高い手段を提供します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3