メインコンテンツへスキップ

PythonでSQLiteを扱う

目次

はじめに
#

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コマンドを実行します。

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

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

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

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()を実行してデータベースとの接続を切る必要があります(排他制御が実施されているため、接続を切らないと、他のプログラムやユーザがデータベースにアクセスできなくなる)。

テーブル名の一覧
#

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

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

実行結果

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

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

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

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

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

実行結果

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

レコードの更新・削除
#

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

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

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

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

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

テーブルの削除
#

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

cur.execute("DROP table customer")

参考
#

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

関連記事

SphinxでMarkdown拡張言語のMySTを扱う
·1768 文字·4 分
SphinxでMarkdownの拡張言語であるMyST (Markedly Structured Text) を導入する方法をまとめました。
SphinxのモダンテーマFuroを導入する
·1008 文字·3 分
Python製ドキュメント生成ツールSphinxのモダンテーマFuroの導入方法をまとめました。
Sphinxを使ったHTMLドキュメント作成
·1623 文字·4 分
ドキュメント生成ツールSphinxを導入し、HTMLファイルを生成するまでの方法をまとめました。
SphinxでPython docstringからドキュメントを自動生成する
·2014 文字·5 分
ドキュメント生成ツールSphinxを使って、Pythonスクリプトのクラスや関数のdocstringからHTMLドキュメントを自動生成する方法を解説する。
Scikit-learnのPolynomialFeaturesでべき乗を求める
·1917 文字·4 分
PolynomialFeaturesクラスの引数とメソッドについて解説する。また、特徴量の数を1~3まで変化させ、オプションによって出力がどのように変化するか確認する。
scikit-learnのBaggingClassifierでバギングする
·2756 文字·6 分
BaggingClassifierを用いた学習(バギング、ペースティング、ランダムサブスペース、ランダムパッチ)について解説する。