0Pricing
Learn AI with Python · レッスン

Python の sqlite3 モジュールで SQLite を扱う

データベースとテーブルの作成、INSERT/SELECT/UPDATE、パラメータ化クエリ、接続管理を学びます。

「Python の sqlite3 モジュールで SQLite を扱う」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

AIにデータベースを使う理由

データが増えたり、プロジェクトの複数の部分で同じレコードが必要になったりするまでは、フラットファイルでも対応できます。データベースを使うと、高速なクエリ、構造化されたスキーマ、安全な同時アクセスが可能になります。

SQLiteは、Pythonの sqlite3 モジュールに組み込まれた、設定不要のファイルベースデータベースです。AIの実験や小規模なプロジェクトに最適です。

sqlite3.connectによる接続

sqlite3.connect はデータベースファイルを開くか作成し、接続を返します。一時的なメモリ上のデータベースには :memory: を使います。

import sqlite3

conn = sqlite3.connect("ml.db")   # creates ml.db if missing
print(conn)

カーソルとcursor.execute

接続から取得したカーソルを使ってSQLを実行します。cursor.execute(sql) は文をデータベースに送ります。

import sqlite3

conn = sqlite3.connect("ml.db")
cur = conn.cursor()
cur.execute("SELECT sqlite_version()")
print(cur.fetchone())

CREATE TABLE IF NOT EXISTS

スキーマを指定してテーブルを定義します。IF NOT EXISTS を使うと、文を繰り返し安全に実行できます。テーブルがすでに存在していてもエラーになりません。

cur.execute("""
CREATE TABLE IF NOT EXISTS experiments (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    accuracy REAL,
    created_at TEXT
)
""")

プレースホルダーを使ったINSERT

文字列フォーマットでSQLを組み立てることは絶対に避けてください。SQLインジェクションの原因になり、引用符を含む値で問題が起きます。? プレースホルダーを使い、値をタプルとして渡してください。

cur.execute(
    "INSERT INTO experiments (name, accuracy, created_at) VALUES (?, ?, ?)",
    ("baseline", 0.82, "2026-05-29"),
)

executemanyによる複数行の挿入

executemany はタプルのリストを1回の効率的な呼び出しで挿入します。execute をループで呼び出すよりも、はるかに高速です。

rows = [
    ("rf", 0.88, "2026-05-29"),
    ("xgb", 0.91, "2026-05-29"),
]
cur.executemany(
    "INSERT INTO experiments (name, accuracy, created_at) VALUES (?, ?, ?)",
    rows,
)

conn.commit()で変更を保存

書き込みはトランザクション内で行われ、conn.commit() を呼び出すまで永続化されません。これを忘れるのは初心者に最も多いバグで、接続を閉じるとデータが気付かないうちに消えてしまいます。

conn.commit()   # persist all pending INSERT/UPDATE/DELETE

fetchallとfetchoneによるクエリ結果の取得

SELECT の後で、結果を取得します。

  • fetchone() — 次の1行
  • fetchall() — 残りのすべての行をタプルのリストとして取得
  • 大きな結果の場合はカーソルを直接反復処理
cur.execute("SELECT name, accuracy FROM experiments")
for row in cur.fetchall():
    print(row)   # ("baseline", 0.82) ...

絞り込みと並べ替え

SQLに複雑な処理を任せます。WHERE で絞り込み、ORDER BY で並べ替え、LIMIT で件数を制限します。クエリの値にもプレースホルダーを使ってください。

cur.execute(
    "SELECT name, accuracy FROM experiments WHERE accuracy > ? ORDER BY accuracy DESC LIMIT 3",
    (0.85,),
)
print(cur.fetchall())

名前でアクセスするためのRow Factory

デフォルトでは、行はタプルです。conn.row_factory = sqlite3.Row を設定すると、列名でアクセスできるようになり、コードが大幅に読みやすくなります。

import sqlite3

conn = sqlite3.connect("ml.db")
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute("SELECT * FROM experiments")
row = cur.fetchone()
print(row["name"], row["accuracy"])

安全性のためのコンテキストマネージャー

接続に with を使うと、成功時には自動的にコミットされ、エラー時にはロールバックされます。closing と組み合わせれば、確実に後片付けできます。

import sqlite3
from contextlib import closing

with closing(sqlite3.connect("ml.db")) as conn:
    with conn:   # auto commit/rollback
        conn.execute(
            "INSERT INTO experiments (name, accuracy) VALUES (?, ?)",
            ("svm", 0.79),
        )

クイックチェック:書き込みの永続化

複数のINSERT文を実行してから接続を閉じましたが、次に開いたときにはデータが消えていました。

振り返り:sqlite3によるSQLite操作

これで、Pythonから実際のデータベースを使えるようになりました。

  • sqlite3.connect と cursor
  • 安全なスキーマを定義する CREATE TABLE IF NOT EXISTS
  • ? プレースホルダーと executemany を使った INSERT
  • 書き込みを永続化する conn.commit()
  • fetchone/fetchall、WHERE/ORDER BY/LIMIT
  • 読みやすく安全なコードのための sqlite3.Row とコンテキストマネージャー

次は、pandasとSQLをつなぎます。

よくある質問

「Python の sqlite3 モジュールで SQLite を扱う」レッスンは無料ですか?

はい。「Python の sqlite3 モジュールで SQLite を扱う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「Python の sqlite3 モジュールで SQLite を扱う」で何を学びますか?

データベースとテーブルの作成、INSERT/SELECT/UPDATE、パラメータ化クエリ、接続管理を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Python の sqlite3 モジュールで SQLite を扱う」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Python の sqlite3 モジュールで SQLite を扱う
  2. Pandas と SQL の連携
  3. 機械学習の結果を保存・検索する
  4. ベクトルデータベース入門
← Learn AI with Pythonに戻る