※この記事にはアフィリエイトリンクを含みます(PR)
どうも、AIツール実践者兼SEOライターの「ぷーた」です。
皆さんは、日々の業務や趣味で、データを管理したり、繰り返し作業を自動化したりする際に、どんなツールを使っていますか? ExcelやCSVファイルも便利ですが、データ量が増えたり、複雑な検索や更新が必要になったりすると、管理が煩雑になりがちですよね。
そこで自分が最近ヘビーローテーションで活用しているのが、PythonとSQLiteの組み合わせです。これ、本当に便利なんです。
「データベースって聞くと難しそう…」 「PythonでSQLiteなんて、プログラミング上級者向けなんじゃ…」
そう思われた方もいるかもしれません。でも、安心してください! SQLiteは、特別なサーバーが不要で、ファイル一つで完結する軽量なデータベースなので、Pythonとの連携も非常にシンプルです。自分が実際に使ってみて、「もっと早く知りたかった!」と強く感じたので、今回はその魅力を、初心者の方にもわかりやすく、具体的な使い方と共にお伝えしたいと思います。
この記事を読めば、
- SQLiteとPythonの連携方法がわかる
- 基本的なデータベース操作(作成、テーブル作成、データ挿入、検索、更新、削除)ができるようになる
- Pythonを使ったデータ自動化の第一歩が踏み出せる
という状態を目指せます。さあ、あなたもPythonでデータ管理・自動化の扉を開きましょう!
SQLiteとは? Pythonで扱うメリット
まず、SQLiteとは一体何なのか、そしてなぜPythonで使うと便利なのかを簡単に説明しておきましょう。
SQLiteは、サーバーを必要としない、ファイルベースのリレーショナルデータベース管理システム(RDBMS)です。つまり、データベースを操作するための特別なソフトウェアをインストールしたり、設定したりする必要がなく、単一のファイル(.dbや.sqlite拡張子が多い)として存在します。この手軽さが最大の魅力です。
Pythonには、標準ライブラリとしてsqlite3モジュールが組み込まれています。つまり、Pythonさえインストールされていれば、追加のライブラリをインストールすることなく、すぐにSQLiteを操作できるのです。
自分がPythonとSQLiteを使い始めたのは、Webスクレイピングで取得した大量のデータを効率的に保存・管理したかったからです。Excelだと管理しきれなくなったデータも、SQLiteなら構造化して保存できるので、後から必要な情報だけを瞬時に取り出せます。さらに、Pythonの強力なデータ処理能力と組み合わせることで、
- 定期的なデータ収集とデータベースへの自動登録
- 特定の条件に合致するデータの抽出とレポート作成
- Webアプリケーションのバックエンドとしてデータの永続化
など、様々な自動化や効率化が可能になります。
PythonでSQLiteデータベースを操作する基本手順
では、具体的にPythonでSQLiteをどう使うのか、基本的な流れを見ていきましょう。自分はいつも以下のステップで作業を進めています。
1. SQLiteデータベースへの接続
まずは、Pythonのsqlite3モジュールを使って、データベースファイルに接続(または新規作成)します。コードは非常にシンプルです。
import sqlite3
# データベースファイル名(存在しない場合は新規作成されます)
db_file = 'my_database.db'
try:
# データベースに接続
conn = sqlite3.connect(db_file)
print(f"'{db_file}' への接続に成功しました。")
# カーソルオブジェクトを作成(SQL文を実行するために必要)
cursor = conn.cursor()
except sqlite3.Error as e:
print(f"データベースエラー: {e}")
finally:
# 接続を閉じる(通常は処理の最後に)
if conn:
conn.close()
print("データベース接続を閉じました。")
このコードを実行すると、my_database.dbという名前のファイルがカレントディレクトリに作成(または既存のファイルに接続)されます。connオブジェクトがデータベースとの接続を表し、cursorオブジェクトを使ってSQLコマンドを実行します。
ポイント: sqlite3.connect()に渡すファイル名で、データベースが作成されるか既存のものに接続されるかが決まります。コードの最後にconn.close()で接続を閉じるのが、リソース管理の基本です。ただし、with文を使うと、より安全かつ簡潔に接続を管理できます。
import sqlite3
db_file = 'my_database.db'
# 'with'文を使うと、ブロックを抜ける際に自動的にコミットまたはロールバック、そして接続が閉じられます。
try:
with sqlite3.connect(db_file) as conn:
cursor = conn.cursor()
print(f"'{db_file}' への接続を管理しています(with文)。")
# ここでデータベース操作を行う
print("withブロックを抜けました。接続は自動的に閉じられます。")
except sqlite3.Error as e:
print(f"データベースエラー: {e}")
自分は最近、このwith文を使うようにして、コードがスッキリしました。
2. テーブルの作成
データベースにデータを保存するには、まず「テーブル」を作成する必要があります。テーブルは、Excelのシートのようなもので、行と列から構成されます。列にはそれぞれ名前とデータ型(整数、文字列、NULLなど)を指定します。
例えば、簡単な「ユーザー情報」テーブルを作成してみましょう。
import sqlite3
db_file = 'my_database.db'
try:
with sqlite3.connect(db_file) as conn:
cursor = conn.cursor()
# テーブル作成 (IF NOT EXISTS で、既に存在する場合にエラーにならないようにする)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
)
''')
print("テーブル 'users' を作成(または確認)しました。")
except sqlite3.Error as e:
print(f"データベースエラー: {e}")
このコードでは、
CREATE TABLE IF NOT EXISTS users (...)でusersという名前のテーブルを作成しています。id INTEGER PRIMARY KEY AUTOINCREMENT: 自動的に連番が振られる主キー(レコードを識別するユニークな値)です。name TEXT NOT NULL: 必須の文字列型カラム。age INTEGER: 整数型カラム。email TEXT UNIQUE: メールアドレス。重複する値は許可されません。
cursor.execute()メソッドにSQL文を文字列として渡すことで、データベースに命令を実行させます。
3. データの挿入 (INSERT)
テーブルができたら、データを挿入(追加)できます。
import sqlite3
db_file = 'my_database.db'
try:
with sqlite3.connect(db_file) as conn:
cursor = conn.cursor()
# データ挿入
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Alice', 30, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Bob', 25, 'bob@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Charlie', 35, 'charlie@example.com'))
# 複数のデータを一度に挿入 (executemany)
new_users = [
('David', 28, 'david@example.com'),
('Eve', 22, 'eve@example.com')
]
cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", new_users)
# 変更をコミット(保存)
conn.commit() # 'with'文を使わない場合は、明示的にcommit()が必要
print("データを挿入しました。")
except sqlite3.Error as e:
print(f"データベースエラー: {e}")
ここで重要なのが、VALUES (?, ?, ?) の部分です。これは「プレースホルダ」と呼ばれるもので、直接SQL文の中に値を埋め込むのではなく、タプルなどで安全に渡すことができます。SQLインジェクション攻撃を防ぐためにも、この方法を使うのが一般的です。
conn.commit()は、データベースへの変更を確定(保存)させるための命令です。with文を使わない場合は、これを忘れるとデータが保存されないので注意しましょう。
4. データの検索 (SELECT)
保存したデータを取り出すのは、データベース操作の基本中の基本です。
import sqlite3
db_file = 'my_database.db'
try:
with sqlite3.connect(db_file) as conn:
cursor = conn.cursor()
# 全てのユーザー情報を取得
print("\
--- 全ユーザー情報 --- ")
cursor.execute("SELECT id, name, age, email FROM users")
rows = cursor.fetchall() # 全ての行を取得
for row in rows:
print(row) # 各行はタプルとして取得される
# 特定の条件でユーザー情報を取得(例: 年齢が30歳以上のユーザー)
print("\
--- 年齢30歳以上のユーザー --- ")
target_age = 30
cursor.execute("SELECT name, email FROM users WHERE age >= ?", (target_age,))
filtered_rows = cursor.fetchmany(2) # 最大2行取得
for row in filtered_rows:
print(row)
# 一件だけ取得
print("\
--- IDが1のユーザー --- ")
cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
single_row = cursor.fetchone() # 一行だけ取得
if single_row:
print(single_row)
except sqlite3.Error as e:
print(f"データベースエラー: {e}")
SELECT ... FROM users:usersテーブルから指定したカラムを選択します。WHERE age >= ?: 条件を指定します。ここでもプレースホルダを使用します。cursor.fetchall(): 条件に合う全てのレコード(行)をリ
※この記事にはアフィリエイトリンクを含みます(PR)
記事で紹介したツール
- Python — プログラミング言語 — 入門書