この記事では、PythonからSQLiteへのアクセス方法を解説します。
数分でPythonからSQLiteへのアクセスができるようになります。
本記事の内容
- PythonからSQLiteにアクセスするために必要なモノ
- SQLite用サンプルデータの利用
- PythonからSQLiteにアクセスする
それでは、上記に沿って解説していきます。
PythonからSQLiteにアクセスするために必要なモノ
Pythonの標準ライブラリを利用します。
標準ライブラリであるため、別途ライブラリをインストールする必要がありません。
それほど、PythonとSQLiteは一心同体と言うことなのでしょう。
用意する必要があるのは、SQLiteのデータベースだけと言えます。
もちろん、SQLiteをインストールしても構いません。
SQLiteのインストールについては、以下の記事を参考にしてください。
しかし、SQLiteのインストールは必須ではありません。
SQLiteのデータベースファイルがあれば、それでOKなのです。
上記で挙げた記事内でも、データベース・テーブル作成について説明しています。
その通りにすれば、SQLiteのデータベースファイルを作成できます。
でも、手間をかけない方法もあります。
つまりは、SQLiteのインストールが不要な方法です。
その方法を下記で説明します。
SQLite用サンプルデータの利用
SQLite Sample Database
https://www.sqlitetutorial.net/sqlite-sample-database/
上記URLにアクセスして、次の表示を探します。
「Download SQLite sample database」リンクをクリックすれば、ダウンロードが始まります。
ダウンロードしたファイルは、chinook.zipというファイル名です。
このzipファイルを解凍すれば、解凍先のフォルダに次のファイルを確認できます。
これが、SQLiteのデータベースファイルです。
テーブル構成は、次のようになります。
SQLiteのコマンドでテーブル一覧を表示した場合の結果です。
sqlite> .tables albums employees invoices playlists artists genres media_types tracks customers invoice_items playlist_track
このサンプルデータベースを用いて、以下の検証をしていきます。
PythonからSQLiteにアクセスする
まずは、データベースファイルを用意しておきます。
プログラムと同じ階層に、データベースファイルを設置します。
確認していくのは、以下の処理となります。
- データ取得
- データ登録
- データ更新
- データ削除
それぞれを以下で説明していきます。
その前に、対象となるテーブルの情報を確認しておきます。
media_typesテーブル
sqlite> .schema media_types CREATE TABLE IF NOT EXISTS "media_types" ( [MediaTypeId] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [Name] NVARCHAR(120) );
media_typesには、次の一覧が登録されています。
(1, 'MPEG audio file') (2, 'Protected AAC audio file') (3, 'Protected MPEG-4 video file') (4, 'Purchased AAC audio file')
データ取得
media_typestテーブルからデータを取得するサンプルコードです。
import sqlite3 # データベースファイルの指定 dbname = "chinook.db" # DB接続 conn = sqlite3.connect(dbname) # カーソル作成 cur = conn.cursor() # データ取得 sql = "SELECT * FROM media_types" cur.execute(sql) # カーソルからデータを取り出す for row in cur: print(row) # DB切断 conn.close()
内容は、コメントを見てください。
難しいところは、何もないと思います。
データ登録
media_typestテーブルにデータを登録するサンプルコードです。
import sqlite3 # データベースファイルの指定 dbname = "chinook.db" # DB接続 conn = sqlite3.connect(dbname) # カーソル作成 cur = conn.cursor() # データ登録 sql = "INSERT INTO media_types (Name) values('Waveform Audio File')" cur.execute(sql) # コミット conn.commit() # DB切断 conn.close()
データ取得との大きな違いは、コミットです。
もちろん、カーソルからデータ抜き出す抜き出さないの違いはあります。
そうだとしても、簡単ですね。
では、上記を実行した結果を確認します。
確認には、データ取得のプログラムを利用しています。
(1, 'MPEG audio file') (2, 'Protected AAC audio file') (3, 'Protected MPEG-4 video file') (4, 'Purchased AAC audio file') (5, 'AAC audio file') (6, 'Waveform Audio File')
なお、media_typestは「AUTOINCREMENT」で自動採番となっています。
データ更新
データ登録のコードとほぼ同じです。
違いは、以下。
# データ更新 sql = "UPDATE media_types SET Name = 'WAV' WHERE MediaTypeId = 6"
SQL文だけ変更しています。
これだけでデータ更新となります。
上記を実行した結果を確認します。
(1, 'MPEG audio file') (2, 'Protected AAC audio file') (3, 'Protected MPEG-4 video file') (4, 'Purchased AAC audio file') (5, 'AAC audio file') (6, 'WAV')
MediaTypeId=6が、「Waveform Audio File」から「WAV」に変更されています。
データ削除
データ登録のコードとほぼ同じです。
違いは、以下。
# データ削除 sql = "DELETE FROM media_types WHERE MediaTypeId = 6"
データ更新と同じく、SQL文だけ変更しています。
これだけでデータ削除となります。
上記を実行した結果を確認します。
(1, 'MPEG audio file') (2, 'Protected AAC audio file') (3, 'Protected MPEG-4 video file') (4, 'Purchased AAC audio file') (5, 'AAC audio file')
MediaTypeId=6のデータが削除されていることを確認できます。
まとめ
PythonからSQLiteへのアクセス方法を確認してきました。
データ取得、登録、更新、削除と一通りの確認です。
ほぼ同じコードで対応できました。
それも、読み込むモジュールが「sqlite3」のみというシンプルさです。
とりあえず、PythonからSQLiteへのアクセスの容易さがわかったと思います。
もっと複雑なことをしたい場合は、その都度検索する形で十分でしょう。