- SQLiteの特徴とは?
- PythonでSQLiteを扱ってデータベースを操作するには?
本記事ではこのような疑問を解決します。
Pythonにおけるデータベース操作のやり方はいくつかありますが、
今回はSQLiteを扱ったデータベース操作の方法を解説します。
SQLiteは簡易的なデータベースで手軽に操作できるため、
小規模アプリケーションやお試しアプリケーションにおすすめです!
SQLiteの特徴
SQLiteは軽量でオープンソースのリレーショナルデータベース管理システム(RDBMS)です。
※RDBMS・・・Relational DataBase Management Systemの略
他のRDBMS(MySQLやPostgreSQLなど)と違ってサーバを必要とせず、
データベースエンジンがプログラム内に統合されているため、組み込み型データベースとも呼ばれます。
また、SQLiteではデータを単一のファイルで管理するため、良くも悪くも複製や削除が簡単にできます。
さらに、SQLiteには認証機能がなく、誰でもいじれるため、ファイルの管理には注意が必要です。
ちなみに、SQLiteの現在のバージョンが「3」であるため、
「SQLite3」と表記されているものもよく目にします。
そして、Pythonでは標準でSQLiteを扱うライブラリが準備されているため、
追加のPythonライブラリのインストールは不要です。
データベースと接続する
下記の記述でデータベースに接続できます。
import sqlite3
# 'test.db'というDBファイルが生成される。すでに存在する場合はそのファイルが読み込まれる。
conn = sqlite3.connect('test.db')
# conn = sqlite3.connect(':memory:') DBファイルを生成せずにメモリ上で操作を行いたい場合は左記のように記述する。
conn.close()
ちなみに、with句を使って下記のように記述しても良いでしょう。
import sqlite3
with sqlite3.connect('test.db') as conn:
テーブルを作成する
テーブルの作成はexecute()にテーブル作成のSQL文を渡して行います。
なお、以後行っていくCRUD処理も同様です。
ここでは「users」というテーブルを作成します。
usersテーブルはidカラムとnameカラムを持つこととします。
import sqlite3
conn = sqlite3.connect('test.db')
curs = conn.cursor()
curs.execute('CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING)')
curs.close()
conn.close()
レコードを操作する
データベースへの接続およびテーブル作成が完了したので、実際にCRUD処理を行なっていきます。
なお、これから説明していくコードの前後には下記の記述があることを前提とします。
import sqlite3
conn = sqlite3.connect('test.db')
curs = conn.cursor()
# ===================================================================================
# この中(これから説明していくコード)
# ===================================================================================
curs.close()
conn.close()
レコードを追加する
「user1」というnameカラムを持つレコードを追加します。
curs.execute('INSERT INTO users(name) values("user1")')
# データベースへ反映させるためにコミットが必要。
conn.commit()
レコードを全件取得する
usersテーブルのすべてのレコードを取得します。
curs.execute('SELECT * FROM users')
# fetchall()は中身を全て取得するメソッド
print(curs.fetchall())
# => [(1, 'user1')]
レコードを更新する
「user1」というnameカラムを持つレコードを「user2」というnameに更新します。
curs.execute('UPDATE users set name = "user2" WHERE name = "user1"')
conn.commit()
レコードを削除する
「user2」というnameカラムを持つレコードを削除します。
curs.execute('DELETE FROM users WHERE name = "user2"')
conn.commit()
まとめ
以上がPythonでSQLiteを扱う方法になります。
SQLiteは単一のファイルでデータを管理するため、操作がわかりやすいです。
また、データベース操作についても、execute()にSQL文を渡すことで様々なCRUD処理が可能になります。
ぜひいろいろ試してみてください!