35
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PythonでSQLite

Last updated at Posted at 2019-01-02

#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', 'test@gmail.com')
    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の価格監視システムを構築します.
 ここまで読んでいただきありがとうございました.

35
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?