Subscribed unsubscribe Subscribe Subscribe

SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

Tips, select count in psycopg2.

Database Python

psycopg2を使ってDBを操作していた時にSELECTの戻り値でハマりました。
testコードの期待する結果としては、Playersテーブルの件数を0としていました。テーブルに対してはinsertはしておらず、空の状態であり、単純にselect count(*)としているので0と返ってくるはずだったのですが、これが0にならずにエラー処理に走ってしまう。

def countPlayers():  
    DB = connect()
    cur = DB.cursor()

    cur.execute("SELECT count(*) from players;")
    result = cur.fetchone()
    return result

    cur.close
    DB.close

テストコード

def test_CountPlayers():
    c = countPlayers()
    if c == '0':
        raise TypeError(
            "countPlayers() should return numeric zero, not string '0'.")
    if c != 0:
        raise ValueError("countPlayers should return zero. ")
    print "countPlayers() returns zero."

じゃあ実際には何が返ってきているのだと、print()で出力してみました。
>> (0L,)

おお、まさかのタプル、、!!
どうやら正しくcountは返ってきているみたいなので、count用の変数を切ってあげて解決しました。

def countPlayers():  
    DB = connect()
    cur = DB.cursor()

    cur.execute("SELECT count(*) from players;")
    (number_of_row, ) = cur.fetchone()
    return number_of_row

    cur.close
    DB.close

修正後、結果。 >>> countPlayers() returns zero.


参考:StackOverFlow

Remove all ads