2017-08-21 3 views
1

mysql接続がアクティブかどうかを確認したいと思います。 MYSQLdbを使ってPythonでそれを行う方法。私はdocsから次のことを試してみました:MySQLdbのis_connected()を使ってpythonを使ってアクティブなmysql接続をチェックする方法?

conn.is_connected() 

これははAttributeErrorを返します。「接続」オブジェクトには属性「is_connected」がありません。

は、次に私が試した:

conn.ping(attempts=1, delay=0) 

これが返されます:TypeError例外:PINGを()これを行うにはどのように何のキーワード引数

を取りませんか?私はあなたが指している

if conn.open: 
    do some code... 

答えて

2

ドキュメントを試みるべきだと思う

+0

私はmysqlの設定権を有効にして再接続する必要がありますか? – Cijo

+0

私はそれをしない。デフォルトであるかもしれません。 – phd

+0

1.2.2の新機能:オプションの再接続パラメータを受け入れます。 Trueの場合、 クライアントは再接続を試みます。この設定は です。デフォルトでは、これはMySQL <5.0.3でオンになり、それ以降は でオフになります。 – Cijo

0

は(;だけでなく、MySQLの多くのPython DBのAPIドライバーがある別名mysql-python)についてmysql-connector、ないMySQLdbです。 MySQLdbのためのドキュメントはhttp://mysql-python.sourceforge.net/MySQLdb.html

Connection objects in MySQLdbにある一つのパラメータで.ping()方法を持っていると.is_connected()を持っていません。

あなたはconn.ping(True)をお探しですか?

+0

彼らの違いは何ですか – Cijo

+0

うまくいく、うまくいくはずです。 – MishaVacic

0

実際にMySQLdbでは、よりエレガントな方法では、接続がアクティブかどうかをチェックしません。接続がアクティブであるかどうかをチェックすると、mysqlサーバが接続を滑らかに閉じる場合にも例外が発生します。それを残してtry exceptブロックで再接続メカニズムを使用するだけです。

MySQLdbにはエラーが発生したときに使用されるerror.pyがconnection.pyにあります。

def defaulterrorhandler(connection, cursor, errorclass, errorvalue): 
""" 

If cursor is not None, (errorclass, errorvalue) is appended to 
cursor.messages; otherwise it is appended to 
connection.messages. Then errorclass is raised with errorvalue as 
the value. 

You can override this with your own error handler by assigning it 
to the instance. 

""" 
error = errorclass, errorvalue 
if cursor: 
    cursor.messages.append(error) 
else: 
    connection.messages.append(error) 
del cursor 
del connection 
raise errorclass, errorvalue 

del connection」を参照してください。接続を終了し、接続をなしに設定します。それでエラーを起こさせて、その後我々は世界を再構築します。

したがって、Mysqlがなくなったなどの問題を処理するためにtry exceptブロックに再接続メカニズムを実装するだけで済みます。

関連する問題