JavaScriptを有効にしてください

PythonでSQLiteを扱う

 ·   3 min read

はじめに

Pythonのsqlite3ライブラリを使ってSQLiteを扱う方法をまとめました。
SQLiteはリレーショナルデータベース管理システム (RDBMS, relational database management system) の1つです。SQLiteではデータベースを1つのファイルに格納します(別のRDBMSであるMySQLなどではサーバを立ち上げる必要があります)。

Pythonでは標準ライブラリsqlite3でSQLiteを扱えます。

環境

検証した環境は以下の通りです。また、OSはWindows 10 Home Ver. 21H1を使用しています。

ソフトウェア バージョン
Python 3.9.7
sqlite 3.36.0

用語

リレーショナルデータベースで使用される用語です。

  • テーブル:表
  • カラム:列
  • レコード:行

データベースの作成とデータの追加

PythonによるSQLite操作の一連の流れを示します。まず、SQLiteのデータベースファイルを作成するには、以下のPythonコマンドを実行します。

1
2
import sqlite3
conn = sqlite3.connect('example.db')

ここでは、データベースファイルの名前をexample.dbとしています。実行すると、カレントディレクトリにexample.dbという空のファイルが作成されます。既にexample.dbがある場合は開きます。

続いてデータベースにテーブルを作成し、レコードを追加します。

1
2
3
4
5
cur = conn.cursor()
cur.execute('CREATE TABLE customer(id INTEGER, name STRING, telephone STRING)')
cur.execute('INSERT INTO customer VALUES(0, "Alice", "090-0000-0000")')
conn.commit()
conn.close()

conn.cursor()でカーソルオブジェクトを作成し、cur.executeでSQLを使ってデータベースにアクセスします。
データは顧客情報を例としました。customerという名前のテーブルを作り、カラムはID, 顧客名、電話番号としています。表にすると以下のイメージです。

ID 顧客名 電話番号
0 Alice 090-0000-0000

customer(id INTEGER, name STRING, telephone STRING)
<テーブル名>(<列名> [型] ,...)
という意味です(型の指定は任意です)。

conn.commit()でデータベースに変更を反映させます。最後にconn.close()を実行してデータベースとの接続を切る必要があります(排他制御が実施されているため、接続を切らないと、他のプログラムやユーザがデータベースにアクセスできなくなる)。

テーブル名の一覧

テーブル名の一覧を取得するには以下を実行します。

1
2
3
4
cur = conn.cursor()
cur.execute("SELECT * FROM sqlite_master WHERE type='table'")
for x in cur.fetchall():
   print(x)

実行結果

1
('table', 'customer', 'customer', 2, 'CREATE TABLE customer(id INTEGER, name STRING, telephone STRING)')

sqlite_masterはテーブル名などのメタ情報を格納した特別なテーブルで、データベースファイルに1個だけ作成されます。また、cur.fetchall()はクエリの結果を1件ずつ返す(フェッチ)メソッドです。

テーブル内の全データ取得

customerテーブル内の全データを取得するには以下を実行します。

1
2
3
4
cur = conn.cursor()
cur.execute("SELECT * FROM customer")
for x in cur.fetchall():
   print(x)

実行結果

1
(0, 'Alice', '090-0000-0000')

レコードの更新・削除

レコード単位でデータを更新する場合、UPDATE文を使います。WHERE句で更新するレコードを指定します。

1
cur.execute('UPDATE customer SET telephone = "090-1111-1111" WHERE id=0')

レコードを削除する場合、DELETE文を使います。

1
cur.execute('DELETE FROM customer WHERE id=0')

UPDATE文、DELETE文のどちらも、データベースに変更を保存する場合はconn.commit()を実行します。

テーブルの削除

テーブルを削除する場合、DROP文を使います。

1
cur.execute("DROP table customer")

参考

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

サイト内検索