SQL(オセロのデータ整理002:ビュー作成、データ更新Update)

■SQLを使った操作を試してみる。
前回、オセロの結果をデータベースのテーブルに入れることができたので、そこからビュー(View)を作ったりデータ更新したりとSQLに関係することを試してみる。

まず、どこかで聞いたことがあるビュー。少し調べてみると、ビューは仮想テーブルで、SELECT文を定義したものらしい。
とりあえずサンプルコードを下のように作って動かしてみた。

def view(n):
    db = 'othello_data.db'
    connect = sqlite3.connect(db)
    cursor = connect.cursor()
    sql = 'CREATE VIEW IF NOT EXISTS searchWhite' + str(n) + ' AS SELECT White_result, Black_result, Result FROM game where White_result >' + str(n)
    cursor.execute(sql)
    for row in cursor.execute('SELECT * FROM searchWhite' + str(n)):
        print(str(row))
    connect.close()

ここで、CREATE VIEWによりビューが作成される。このコードでは、view(n)の n に入れた数字に基づき、オセロの白の数がnより大きいものを取得するビューとなる。
何度か数字を変えて実行した後、「select * from sqlite_master」のSQL文でテーブルやビューを表示すると、下の画面のように入力した数字でビューが作成されていた。

繰り返し使用するSELECT文を定義する使い方が一般的なのかな。

次に、Update文でデータの更新を試してみた。

def update_Note(note):
    db = 'othello_data.db'
    connect = sqlite3.connect(db)
    cursor = connect.cursor()
    sql = 'UPDATE game SET Note=' + note + ' where White_result > 59'
    cursor.execute(sql)
    connect.commit()
    connect.close()

このコードでは、Noteカラムの部分がupdate_Note(note)のnoteに入力した値へ更新される。Update文の内容をデータベースに反映するには、commit文が必要。これなしでは、Python上は正常に終了するけど、データベースには反映されない。
オセロの結果を入れているデータベースは後から書き換える必要はないので、あるとしてもNote部分の更新くらい。

オセロの結果をデータベースに保存するにあたり、単純にテーブルにデータを入れるだけでなく便利な機能もdbファイルの中に含めることができるなら、そうしたい。ただ、まずデータを使って何をするか考えないと。