PythonでSQLite
pythonにはSQLiteというライブラリがあり,簡単にローカルでデータベースを作ることができます.今回はSQLiteの使い方を記述します.
使用する環境はPython3.7,ライブラリはsqlite3とcontextlibです.早速コードを書いていきましょう.
テーブルの作成
sqliteを用いてテーブルの作成をします.次のようにコンソールに入力してください.
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()で接続を切ります.変更を保存せずに切断することがないように注意しましょう.
レコードの挿入
先ほど作成したテーブルにレコードを挿入してみましょう.次のようにコンソールに入力してください.
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', 'test@gmail.com')
cursor.execute(sql, data)
connection.commit()
connection.close()
レコードを挿入する場合にはinsert文を実行します.カラムとそれに対応する値を指定することでレコードを挿入できます.SQL文に値をセットするにはセットしたい場所に?を記述し,executeメソッドの第2引数にセットする値をタプルで渡します.タプルのリストを渡せば,一度に複数のSQLを実行できます.
データベースに変更を加えるため忘れずcommitしましょう.
レコードの取得
挿入したレコードを確認してみましょう.レコードの取得は次の文で行います.
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文を使用します.
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の価格監視システムを構築します.
ここまで読んでいただきありがとうございました.