2017-03-08 33 views
0

私はちょうどPythonパッケージ:cx_oracleをインストールしました。 the cx_oracle documentから、私は方法が見つけました:Connection.ping()、これは「接続がまだアクティブかどうかをテストするのに使うことができるサーバにpingしてください」と記述されています。cx_oracleのConnection.ping()の戻り値は何ですか?

しかし、このドキュメントでは、戻り値がping()とは何も記載されていません。私は、テストを行うにいくつかのコードを書いた

:接続が閉じられた後cx_Oracle.InterfaceError: not connected:テスト結果から

#!/usr/bin/env python3 
import cx_Oracle 
conn = cx_Oracle.connect("...") 
print(conn.ping()) # display:None 
conn.close() 
print(conn.ping()) # raise exception: cx_Oracle.InterfaceError: not connected 

を、私はping()は、接続がOKであればNoneを返すか、例外が発生しますました。

戻り値はありますか?なぜ真か偽を返さないのですか?

答えて

0

cx_Oracle documentation states thatこれは、次のとおりです。

この方法では、DBのAPIの定義の拡張機能であり、唯一のOracle 10g R2の中に利用可能と高くなっています。

しかし、この方法では、PEP 249に記載されていません - (そのことについてまたはどこか他の)connection methodsoptional extensionsのいずれかで現在のPythonデータベースAPI仕様を。

PEP 249のMySQL実装もhas this methodです。ドキュメントに記載されている内容は次のとおりです。

接続が利用できない場合は、InterfaceErrorが発行されます。 is_connected()メソッドを使用して、 エラーを発生させずに接続を確認してください。

エラー時にInterfaceErrorを発生させます。このよう

は、私は、これはあなたの質問への答えであることを前提としていますcx_Oracleの動作と同じであり、あなたがする行動を決定してきたものが正しいです:

  • があればノーリターンはありません接続は、私たちがthe code for .ping()を見て、それが、これは仕方あることを確認した場合、接続が

アクティブでない場合はInterfaceErrorが上昇した

  • アクティブですメソッドが実装されている:

    static PyObject *Connection_Ping(
        udt_Connection *self,    // connection 
        PyObject* args)      // arguments 
    { 
        sword status; 
    
        if (Connection_IsConnected(self) < 0) 
         return NULL; 
        status = OCIPing(self->handle, self->environment->errorHandle, 
          OCI_DEFAULT); 
        if (Environment_CheckForError(self->environment, status, 
          "Connection_Ping()") < 0) 
         return NULL; 
        Py_INCREF(Py_None); 
        return Py_None; 
    } 
    
    関連する問題