PythonからSQLiteを操作する方法

 2021.04.26  株式会社システムインテグレータ

多くのプログラミング言語はRDBMSで作成されたデータベースを操作できるようになっており、Pythonもその例外ではありません。MySQL, Postgresql, Oracke, SQLiteなど、Pythonは主要なデータベースとの連携方法を網羅しており、対応できる幅が広いです。

本記事ではその中でも一番シンプルに活用できるSQLiteに焦点を当て、Pythonからデータベースを扱う方法について解説します。プログラム内でデータベースを扱えるようになると、Webアプリケーション作成の幅が大きく広がりますよ!

SQLiteについて補足

SQLiteはSQLとLight(軽量)を合わせた造語で、「軽量なデータベース」であることが特徴です。MySQLやPostgresqlなどの主要なデータベースは、データベース用のサーバーが必要になることが多いですが、SQLiteは1つのファイルでデータベースを管理するので非常に扱い易くなっています。

いわゆる「組み込み型RDBMS」な特徴からスマホアプリ内の設定情報などをアプリ内部で格納しておけるので、近年非常によく使われるRDBMSとなっています。

SQLiteのより詳しい内容はこちらからどうぞ!

https://products.sint.co.jp/topsic/blog/sqlite

sqlite3モジュールをインポート

Pythonでsqliteを使うには「sqlite3」モジュールをimportして使用するのが楽です。組み込みモジュールなので、pip等でインストールする必要はありません。

コード:
import sqlite3

たったこれだけでSQLiteを使う準備ができます。
以降では、実際にPythonからSQLiteを操作してみましょう。

操作方法① データベース作成

sqlite3.connect()にデータベース名を渡すことでデータベースを作成できます。また、既に存在する場合はそのデータベースとの接続を確立します。どの場合でもまずデータベースと接続しないと操作できないので、まずこの処理が必要になります。

コード:
import sqlite3

dbname = 'main.db'
# DBを作成する(既に作成されていたらこのDBに接続する)
conn = sqlite3.connect(dbname)

# DBとの接続を閉じる(必須)
conn.close()

また、最後にclose()するのを忘れないようにしましょう。基本的にデータベース操作はconnect()とclose()の間で行います。データベースが作成されると、connect()に渡したデータベース名のファイルが実行したPythonファイルと同じ階層に作成されます。

操作方法② テーブル作成

次にテーブルを作成してみましょう。

コード:
import sqlite3

dbname = 'main.db'
conn = sqlite3.connect(dbname)

# SQLiteを操作するためのカーソルを作成
cur = conn.cursor()

# テーブルの作成
cur.execute(
    'CREATE TABLE items(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, price INTEGER)'
)

conn.close()

cursor()はSQLiteを操作するための「カーソル」というものを作成します。ゲーム機で言うところのコントローラーみたいなもので、これを使ってデータベースを操作します。

次にexecute()にCREATE TABLE文を渡してテーブルを作成しています。テーブルにかかわらず、execute()にSQL文を渡すことでどんなSQLも実行可能です。

操作方法③ テーブルにデータ登録

execute()を使えばデータの登録も可能です。

コード:
# データ登録
cur.execute('INSERT INTO items values(0, "りんご", 100)')

# コミットしないと登録が反映されない
conn.commit()

INSERT文はDML文なので、コミットしないと登録がデータベースに反映されない点は他のRDBMSと同じです。

execute()を1件ずつ実行することで複数件登録することもできますが、executemany()を使う方がより便利です。

コード:
# 登録するデータ
inserts = [
    (1, "みかん", 80),
    (2, "ぶどう", 150),
    (3, "バナナ", 60)
]

# 複数データ登録
cur.executemany('INSERT INTO items values(?, ?, ?)', inserts)

操作方法④ テーブルのデータ取得

次にSELECT文を使って、登録したデータを取り出してみましょう。

コード:
# データ検索
cur.execute('SELECT * FROM items')

# 取得したデータはカーソルの中に入る
for row in cur:
    print(row)

結果:
(0, 'りんご', 100)
(1, 'みかん', 80)
(2, 'ぶどう', 150)
(3, 'バナナ', 60)

検索結果はカーソルの中に入るので、for...in文でループして取得可能です。

テーブルのデータを更新・削除する

データの更新・削除は同じくexecute()を使います。

コード:
# データ更新
cur.execute('UPDATE items SET price = 260 WHERE id = "3"')
# データ削除
cur.execute('DELETE FROM items WHERE id = "2"')

cur.execute('SELECT * FROM items')
for row in cur:
    print(row)

結果:
(0, 'りんご', 100)
(1, 'みかん', 80)
(3, 'バナナ', 260)

まとめ

設定値やリソースデータをテーブルに格納しておき、必要なときに取り出して利用することは高度なアプリケーションを開発する上で必須ともいえる技術です。

重要な技術でありながら、Pythonでは組み込みのモジュールをimportするだけで簡単にデータベースと連携ができるので、高度なアプリケーションだけでなく簡易なスクリプトに使う場合にも非常に有用です。

DBMSについては、SQLiteはその簡易さから初めてデータベースを触る方にとっても扱いやすいので、初心者や軽量なアプリの開発におすすめです。ぜひ使ってみてください。


RELATED POST関連記事


RECENT POST「SQL」の最新記事


この記事が気に入ったらいいねしよう!

om