PythonでSQLite


PythonでSQLite

 pythonにはSQLiteというライブラリがあり,簡単にローカルでデータベースを作ることができます.今回はSQLiteの使い方を記述します.
 使用する環境はPython3.7,ライブラリはsqlite3とcontextlibです.早速コードを書いていきましょう.

テーブルの作成

 sqliteを用いてテーブルの作成をします.次のようにコンソールに入力してください.

create_table.py
import sqlite3
from contextlib import closing
dbname = 'database.db'

with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'create table test (id int, name varchar(64), e-mail varchar(1024))'
    cursor.execute(sql)
    connection.commit()
    connection.close()

 データベースへの接続にはsqlite3.connect()メソッドを使用します.このとき,データベースが存在するならそのデータベースに接続し,存在しない場合にはデータベースを自動で生成します.
 SQLを実行するにはConnectionオブジェクトからCursorオブジェクトを作成します.Cursorオブジェクトに対してexecuteメソッドを実行することで,引数に与えるSQL文を実行することができます.今回はカラムがidとname,e-mailのtestテーブルを作成しました.
 データベースに対する変更を保存するにはconnection.commit()を使用します.最後にconnection.close()で接続を切ります.変更を保存せずに切断することがないように注意しましょう.

レコードの挿入

先ほど作成したテーブルにレコードを挿入してみましょう.次のようにコンソールに入力してください.

insert.py
dbname = 'database.db'
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'insert into test (id, name, e-mail) values (?,?,?)'
    data = (10, 'kawamoto', '[email protected]')
    cursor.execute(sql, data)
    connection.commit()
    connection.close()

 レコードを挿入する場合にはinsert文を実行します.カラムとそれに対応する値を指定することでレコードを挿入できます.SQL文に値をセットするにはセットしたい場所に?を記述し,executeメソッドの第2引数にセットする値をタプルで渡します.タプルのリストを渡せば,一度に複数のSQLを実行できます.
 データベースに変更を加えるため忘れずcommitしましょう.

レコードの取得

 挿入したレコードを確認してみましょう.レコードの取得は次の文で行います.

select.py
dbname = 'database.db'
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'select * from test where name = ? '
    data = ('kawamoto', )
    for row in cursor.execute(sql, data):
        print(row)
    connection.close()

 レコードを取得するにはselect文を使用します.selectの後ろで取得するカラムを,whereで条件を指定することができます.where文を省略すると,すべてのデータを取得することができます.
 SQLにセットする値が1つだけの場合には注意が必要です.引数はタプルで与えなければならないため,data = ('kawamoto')とするとエラーが発生します.無理やりタプルにするためにdata = ('kawamoto, ')とする必要があります.
 実行結果を表示するためにfor文で走査し,順に表示します.データはレコードごとにタプルで返って来ます.for文で走査するとタプルのリストのように扱うことができますが,あくまでCursorオブジェクトであることに注意が必要です.タプルのリストに直すにはリストを用意して順にappendする必要があります.

レコードの削除

 最後にレコードの削除の方法を確認します.レコードの削除にはdelete文を使用します.

select.py
dbname = 'database.db'
with closing(sqlite3.connect(dbname)) as connection:
    cursor = connection.cursor()
    sql = 'delete from test where name = ?'
    data = ('kawamoto', )
    cursor.execute(sql, data):
    connection.commit()
    connection.close()

 delete文もwhereで実行するレコードを指定できます.where指定を忘れるとすべてのデータを削除してしまうので注意が必要です.これもデータベースに変更を加えるため,実行後に忘れずcommitするようにしましょう.

おわりに

 これでデータベースの基本操作を行うことができるようになりました.これだけできれば基本的に困ることはありません.次回はこれと前回の内容を用いてAmazonの価格監視システムを構築します.
 ここまで読んでいただきありがとうございました.