2012-07-31 7 views
6

私はPythonからMySQLdbライブラリ経由でMySQLデータベースにアクセスしています。私は以下のようにデータベース接続をテストしようとしています。Pythonでデータベース接続をテストするには?

db = MySQLdb.connect(self.server, self.user, 
        self.passwd, self.schema) 
cursor = db.cursor()   
try: 
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    ver = results[0] 
    if (ver is None): 
     return False 
    else: 
     return True    
except: 
    print "ERROR IN CONNECTION" 
    return False 

これは、ユニットテストケースを作成する際の接続性をテストする正しい方法ですか?より良い方法があれば、教えてください!

+0

コードのエラーを修正しました。これが正しい方法であるかどうかを知る必要がありますか? – Nemo

+0

*なぜ*テスト*接続したいですか?テストに失敗したらどうしますか? –

+0

私はdbアクセスメソッドのためのユニットテストケースを書いています。したがって、データベースへのアクセスが失敗した場合は除外したい。 – Nemo

答えて

1

はい。は、私にはよく見えますよ。

私の個人的な好み:

  • は接続
  • はあなただけfetchoneする必要がない場合は、実際に例外をスローし、データベースの最小バージョンを強制することに熱心でない限り、なしのためのテストは(不必要です)
+0

私はそれが余分な理由は分かりませんでした。どのようにこれをコード化したいと思いますか? – Nemo

+0

接続がない場合は「結果」はありません。あなたはおそらく、Noneのときに "results [0]"を実行しようとするいくつかの他の例外を得るでしょう。それを試してみてください! –

8

私は間違っている(またはあなたの質問を誤解しています:))、私は接続関連の例外がMySQLdb.connect()にスローされると信じています。 MySQLdbでは、キャッチする例外はMySQLdb.Errorです。したがって、ブロック内にdb設定を移動し、適切な例外(MySQLdb.Error)を取得することをお勧めします。 @JohnMeeは言及しても、結果がない場合fetchone()はNoneを返しますので、これは動作するはずです:

try: 
    db = MySQLdb.connect(self.server, self.user, 
         self.passwd, self.schema) 
    cursor = db.cursor()   
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    # Check if anything at all is returned 
    if results: 
     return True 
    else: 
     return False    
except MySQLdb.Error: 
    print "ERROR IN CONNECTION" 
return False 

あなたが接続を気にしないし、ちょうどクエリの実行をテストするために探している場合は、私は次の、おそらくとして、あなたはtry外の接続設定を残すことができると思いますが、あなたの例外でMySQLdb.Errorを含める:

db = MySQLdb.connect(self.server, self.user, 
        self.passwd, self.schema) 
cursor = db.cursor() 

try: 
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    # Check if anything at all is returned 
    if results: 
     return True 
    else: 
     return False    
except MySQLdb.Error, e: 
    print "ERROR %d IN CONNECTION: %s" % (e.args[0], e.args[1]) 
return False 

これは、少なくともあなたにそれが失敗した理由のより詳細な理由を与えるだろう。

関連する問題