SQLiteとは何か?
Pythonでアプリを作っていると、「ちょっとデータを保存しておきたいな」と思う場面がよくありますよね。そんなときに登場するのが、**SQLite(エスキューライト)**です。
SQLiteは、初心者でも扱いやすく、設定もほとんどいらないシンプルなデータベースです。

「データベースって難しそう…」と思っていませんか?実はPythonには、インストール不要で手軽に使える『SQLite』という軽量データベースがあります。このページでは、SQLiteの基本からPythonでの使い方、簡単なアプリの作り方までを初心者向けにやさしく解説しています。はじめての方でも安心して読み進められる内容になっていますので、ぜひ一緒に学んでいきましょう!
SQLiteはどんなデータベース?
SQLiteは、「組み込み型のリレーショナルデータベース」です。つまり、他のデータベースのようにサーバーを立ち上げたり、外部ツールを用意したりする必要がありません。
主な特徴
- ファイル1つで完結:データはすべて .db というファイルに保存されます
- インストール不要:Pythonにはじめから sqlite3 モジュールが含まれているため、すぐに使えます
- SQLが使える:データの操作にはSQL(Structured Query Language)を使うため、SQLの基本も一緒に学べます
他のデータベースとの違い
初心者の方が混乱しやすいポイントとして、他のデータベースとの違いを簡単に整理しておきます。
SQLiteとMySQLの違い
- MySQLはネットワークを介して接続する本格的なサーバー型DB
- SQLiteはファイルに保存されるため、ローカル環境で完結する
SQLiteとTinyDBの違い
- TinyDBはPythonの辞書っぽく使える軽量NoSQL(構造が柔軟)
- SQLiteは表形式のデータを扱うリレーショナル型(構造が決まっている)
💡 TinyDBはについてはこちらの記事もおすすめ!
「小規模なアプリで、簡単にデータを保存したい」「将来的には本格的なSQLも学びたい」
そんな方にはSQLiteがぴったりです。
なぜPython初心者におすすめ?
SQLiteは、Pythonと非常に相性が良いデータベースです。その理由は以下のとおりです。
- 環境構築が不要:pip install さえいりません
- 標準ライブラリなので学習しやすい
- SQLの基本を習得できる:データベース操作に必要な基礎が身につきます
- 実際の現場でも使われている:小規模なアプリやスマホアプリの内部DBとして採用例も多いです
SQLiteのインストールと環境準備
PythonでSQLiteを使うための準備はとてもシンプルです。なぜなら、SQLiteはPythonの標準ライブラリに含まれているからです。この章では、環境構築の必要がないこと、そして実際にどのように使い始めるのかを、初心者向けに丁寧に解説します。
SQLiteはインストール不要!
Pythonにはじめから sqlite3 というモジュールが組み込まれています。ですので、特別なライブラリをインストールする必要はありません。
つまり、こんな感じでOKです。
import sqlite3これだけで、SQLiteをすぐに使い始めることができます。
バージョン確認の例
SQLiteが使える状態かどうか確認したい場合は、以下のようにしてバージョン情報を確認できます。
import sqlite3
print(sqlite3.sqlite_version)Pythonをインストールしていれば、ほぼ確実にSQLiteも一緒に使える状態になっています。
SQLiteの基本的な使い方:接続とデータベース作成
それでは、実際にSQLiteでデータベースを作成してみましょう。
データベースに接続する
import sqlite3
# test.db という名前のデータベースに接続(ファイルがなければ作成されます)
conn = sqlite3.connect('test.db')このコードを実行すると、同じディレクトリ内に test.db というファイルが作成されます。ここにすべてのデータが保存されます。
カーソルの作成
データベース操作には「カーソル」というオブジェクトが必要です。
cursor = conn.cursor()カーソルを使って、SQL文を実行していきます。
最初のテーブルを作ってみよう
以下は、ユーザー情報を保存するための「users」テーブルを作る例です。
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''')- CREATE TABLE IF NOT EXISTS:同じ名前のテーブルがなければ作成
- id INTEGER PRIMARY KEY AUTOINCREMENT:自動で連番IDを付与
- name TEXT:名前(文字列)
- age INTEGER:年齢(数値)
データベースへの変更を保存する
SQLで何かを**変更(INSERT, UPDATE, DELETEなど)**した場合は、忘れずに commit() を行いましょう。
conn.commit()これを忘れると、変更が保存されません。
データベースとの接続を閉じる
作業が終わったら、接続を閉じておくのがマナーです。
conn.close()これはファイルを閉じる操作と同じで、リソースの無駄を防ぎます。
基本的な操作(CRUD)
データベースを使ううえで必ず覚えておきたいのが、「CRUD操作」と呼ばれる4つの基本操作です。
- C:Create(作成)
- R:Read(読み取り)
- U:Update(更新)
- D:Delete(削除)
この章では、PythonでSQLiteを使ってそれぞれの操作を行う方法を、実際のコード例と一緒に解説します。
データの挿入(Create)
たとえば、ユーザー情報を保存する場合は次のように書きます。
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Taro", 25))
conn.commit()
conn.close()解説
- ? はプレースホルダー(SQLインジェクション対策にもなります)
- 実際の値(ここでは “Taro” と 25)は、タプルで渡します
データの取得(Read)
登録されているデータを表示してみましょう。
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()解説
- SELECT * FROM users:usersテーブルのすべてのデータを取得
- fetchall():すべての行をリストで取得します
- row は (id, name, age) のようなタプルです
データの更新(Update)
すでに登録されたデータを変更したい場合は、次のようにします。
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (30, "Taro"))
conn.commit()
conn.close()解説
- SET で変更したいカラムを指定します
- WHERE で条件を絞らないと、すべてのデータが変更されるので注意!
データの削除(Delete)
不要になったデータを削除するには、以下のように記述します。
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE name = ?", ("Taro",))
conn.commit()
conn.close()補足
- “Taro”, のように カンマを忘れない こと(1つの値でもタプルで渡すため)
エラーが出たときは?
- SQLの文法ミス:スペルやカンマ、クォートの位置を確認
- テーブル名やカラム名の誤り:データベースの構造を確認
- conn.commit() を忘れると変更が保存されないことがあります
実践!PythonでSQLiteを使った簡単なアプリ例
ここでは、SQLiteを使って簡単な「書籍管理アプリ」をPythonで作ってみます。コマンドライン上で動作するシンプルなプログラムですが、これまで学んだCRUD操作をすべて使います。
アプリの概要
このアプリでは以下の操作ができます:
- 書籍の登録(タイトル・著者・ジャンル)
- 書籍リストの表示
- 書籍情報の更新
- 書籍の削除
前提:データベースとテーブルの準備
最初に、SQLiteのデータベースファイルと、書籍情報を格納するテーブルを作成します。
import sqlite3
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT,
genre TEXT
)
''')
conn.commit()
conn.close()これで books.db というファイルと、books テーブルが準備されました。
書籍の登録機能(Create)
def add_book(title, author, genre):
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO books (title, author, genre) VALUES (?, ?, ?)", (title, author, genre))
conn.commit()
conn.close()
print(f'書籍「{title}」を登録しました。')書籍リストの表示(Read)
def list_books():
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM books")
books = cursor.fetchall()
conn.close()
if not books:
print("書籍は登録されていません。")
return
print("【書籍リスト】")
for book in books:
print(f"{book[0]}. {book[1]}(著者: {book[2]}, ジャンル: {book[3]})")書籍情報の更新(Update)
def update_book(book_id, new_title, new_author, new_genre):
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("UPDATE books SET title = ?, author = ?, genre = ? WHERE id = ?",
(new_title, new_author, new_genre, book_id))
conn.commit()
conn.close()
print(f"書籍ID {book_id} を更新しました。")書籍の削除(Delete)
def delete_book(book_id):
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM books WHERE id = ?", (book_id,))
conn.commit()
conn.close()
print(f"書籍ID {book_id} を削除しました。")メニュー操作(インターフェース)
def menu():
while True:
print("\n=== 書籍管理アプリ ===")
print("1. 書籍を登録する")
print("2. 書籍リストを見る")
print("3. 書籍情報を更新する")
print("4. 書籍を削除する")
print("5. 終了")
choice = input("番号を選んでください:")
if choice == '1':
title = input("タイトル:")
author = input("著者:")
genre = input("ジャンル:")
add_book(title, author, genre)
elif choice == '2':
list_books()
elif choice == '3':
book_id = int(input("更新する書籍ID:"))
new_title = input("新しいタイトル:")
new_author = input("新しい著者:")
new_genre = input("新しいジャンル:")
update_book(book_id, new_title, new_author, new_genre)
elif choice == '4':
book_id = int(input("削除する書籍ID:"))
delete_book(book_id)
elif choice == '5':
print("アプリを終了します。")
break
else:
print("無効な入力です。")
if __name__ == "__main__":
menu()実行方法と補足
このコードを book_manager.py などのファイル名で保存し、以下のコマンドで実行できます。
python book_manager.py注意点:
- 入力チェック(未入力・数字以外など)は省略しています。実用アプリとして使う場合はバリデーション処理を追加しましょう。
- データはすべて books.db に保存され、アプリを再起動しても保持されます。
SQLiteのメリット・デメリット
SQLiteは、Python初心者にとって非常に扱いやすいデータベースですが、もちろん万能というわけではありません。この章では、SQLiteのメリットとデメリットを整理し、どのような場面に向いているのかをわかりやすく解説します。
SQLiteのメリット
インストール不要で手軽に使える
SQLiteはPythonの標準ライブラリに含まれているため、追加のインストール作業が一切不要です。コード1行でデータベースの準備ができる手軽さは、初心者にとって大きなメリットです。
import sqlite3これだけで始められます。
ファイル1つで完結する
SQLiteは、データをすべて1つの .db ファイルに保存します。複雑な設定やネットワーク接続は不要で、ファイルさえあればすぐに使えるのが特徴です。
SQLの学習に最適
リレーショナルデータベースの基本操作(SQL)を学ぶには、SQLiteは最適です。簡単な環境で本格的なSQLを実践できるため、将来的にMySQLやPostgreSQLへ進む土台作りにもなります。
軽量で高速
小規模なアプリであれば、SQLiteは十分すぎるほど高速に動作します。とくにデスクトップアプリやシングルユーザーのツールにはぴったりです。
SQLiteのデメリット
複数人・多接続には不向き
SQLiteはシングルプロセス向けに設計されています。そのため、複数のユーザーが同時にアクセスするWebサービスや、大量のリクエストが発生する環境ではパフォーマンスや整合性に問題が出ることがあります。
データベースのサイズに限界がある
公式には数テラバイトまで対応していますが、数百万件以上のデータを扱う場合は読み書きが遅くなったり、管理が難しくなったりします。本格的な大規模システムには向いていません。
並列処理に制限がある
Pythonのマルチスレッドやマルチプロセスと組み合わせるときには注意が必要です。同時アクセス時にロックがかかりやすく、エラーになることがあります。
SQLiteが向いている用途
- 学習・実験・プロトタイプ開発
- デスクトップアプリやCLIツール
- 単独で動作する社内ツールや個人用アプリ
- 小規模データを扱うスクリプトやバッチ処理
- モバイルアプリ(例:Android/iOSの内部DB)
SQLiteが不向きな用途
- 複数ユーザーが同時にデータ操作するWebアプリ
- 大量のデータやトランザクションが発生する業務システム
- 本格的なスケーラビリティや高可用性が必要なサービス
SQLiteは、「シンプルだけど本格的なデータベース」です。Pythonと組み合わせれば、初心者でも短時間でデータベースアプリを作れるようになります。ただし、その特性を理解し、適材適所で使い分けることが大切です。
よくあるエラーと対処法
PythonでSQLiteを使っていると、初めのうちは思わぬエラーに出くわすことがあります。でも大丈夫。原因さえわかれば対処はシンプルです。この章では、初心者がつまずきやすい代表的なエラーと、その対処法をわかりやすく紹介します。
データベースファイルが見つからない
エラー例
sqlite3.OperationalError: unable to open database file原因と対処法
- ファイルパスが間違っている
- アクセス権限がないフォルダに書き込もうとしている
- ディレクトリが存在しない場所を指定している
解決策
- 相対パスや絶対パスを正しく指定する
- 実行ディレクトリに書き込み権限があるか確認
- 必要なら、事前にフォルダを作成しておく
conn = sqlite3.connect('data/mydata.db') # 'data/' フォルダがなければエラーSQL文の構文エラー
エラー例
sqlite3.OperationalError: near "FROMM": syntax error原因と対処法
- SQL文のスペルミス(例:“FROMM”)
- クォーテーションやカンマの抜け
- WHERE句やVALUES句の記述ミス
解決策
- SQL文を1行ずつ確認
- シングルクォーテーションやカンマの位置に注意
- 公式のSQLite構文リファレンスで文法を確認
# 正しい例
cursor.execute("SELECT * FROM books WHERE title = ?", ("Python入門",))プレースホルダーの数が一致しない
エラー例
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 1 supplied.原因と対処法
- SQLの ? の数と、渡す値の数が合っていない
- 1つだけ渡すときにタプルでない形式にしてしまう
解決策
- ? の数と値の数を一致させる
- 単一の値でも (値,) と カンマ付きのタプルにする
cursor.execute("DELETE FROM books WHERE id = ?", (3,)) # カンマを忘れない!コミットを忘れて変更が反映されない
現象
- INSERTやUPDATEをしても、次回起動時にデータが反映されていない
原因と対処法
- conn.commit() を呼び忘れている
- conn.close() はしているのに保存されていない場合は大抵これ
解決策
conn.commit() # これを必ず実行!SQLiteでは、変更を確定させるために commit() が必要です。
データベースがロックされている
エラー例
sqlite3.OperationalError: database is locked原因と対処法
- 同時に複数のプロセスやスレッドが同じDBにアクセスしている
- 前回の接続が正しく閉じられていない
解決策
- シングルスレッドで順番に操作する
- すべての処理で conn.close() を忘れずに実行する
- 長時間ロックされる処理(大量INSERTなど)を避ける
エラーは「学びのチャンス」
プログラミングにエラーはつきものですが、エラーのメッセージはヒントそのものです。慣れてくると、どのエラーがどういう意味かすぐにピンと来るようになります。
焦らず、一つひとつ確認していくことが、確実なスキルアップにつながります。
まとめと学習の次ステップ
ここまで、Python初心者向けにSQLiteの基本をひと通り解説してきました。SQLiteは、インストール不要で簡単に使え、しかも本格的なSQL操作ができるという点で、初心者が最初に学ぶデータベースとして最適です。
この章では、これまでの内容を振り返りつつ、次にどんな学びを進めていけばよいかをアドバイスします。
SQLiteで学べたことの振り返り
この記事では、以下のような内容を学びました。
SQLiteとは?
- 軽量でファイルベースのリレーショナルデータベース
- Pythonの標準ライブラリで簡単に使える
SQLiteの基本操作(CRUD)
- データの登録(INSERT)
- データの取得(SELECT)
- データの更新(UPDATE)
- データの削除(DELETE)
実践アプリの作成
- 書籍管理アプリを通じて、実際にSQLiteで小さなデータベースアプリを作成
よくあるエラーの解決方法
- 構文ミスやコミット忘れ、ロック状態などのトラブルシューティング
SQLiteを通して、「データベースとは何か」「SQLとはどういうものか」を体感できたはずです。
学習の次ステップ:どこに進むべき?
SQLiteで基礎が身についたら、次は実践的なアプリ開発や他の技術にステップアップしていくのが理想です。
Webアプリ開発との連携(FlaskやDjango)
SQLiteは、軽量なWebアプリとの組み合わせにも適しています。PythonのWebフレームワーク「Flask」や「Django」では、SQLiteが標準で使われています。
ORM(オブジェクト関係マッピング)を学ぶ
SQLを書く代わりに、Pythonのコードだけでデータベースを操作できる仕組みが「ORM」です。有名なものに SQLAlchemy や Django ORM があります。
より本格的なDBへステップアップ
SQLiteの次は、MySQLやPostgreSQLのような本格的なサーバー型データベースに挑戦するのもおすすめです。複数ユーザーや大規模データ処理に対応した技術が学べます。
最後に:実践しながら覚えるのが近道!
データベースは、頭で覚えるよりも実際に使ってみることが一番の近道です。今回紹介した書籍管理アプリをベースに、以下のような拡張をしてみるのも良い練習になります。
- ジャンルごとのフィルター機能を追加
- 発売日や価格など、項目を増やす
- データをCSVで出力する機能をつける
おわりに
SQLiteは、Python初心者がプログラミングを学ぶうえで非常に頼りになる存在です。「データを扱う力」は、どんな開発でも必須のスキルです。今後のプログラミング学習やアプリ開発に、ぜひ活かしていってくださいね。

ここまで読んでいただきありがとうございます!
UdemyのPythonコースにはオンラインで学習ができる動画コンテンツがたくさんあります。
当ブログのような文章メインの説明では足りない箇所を補えると思うので、もっと詳しく勉強したいという方はぜひチェックしてみてください!




コメント